2017-09-09 25 views
0

スウィフト3.1、Xcodeの8.3.3CloudKitエラー:変更トークンが期限切れ、

必要なリセットは、私がCloudKitからエラーを取得しておくと、私はそれについて何をするか分かりません。 CloudKitダッシュボード

<CKError 0x174241e90: "Change Token Expired" (21/1016); server message = "Error code: RESET_NEEDED"; uuid = ...; container ID = "...">

CKServerChangeTokendocumentationがトークンを再設定については何も言及していない、と:

let operation = CKFetchNotificationChangesOperation(previousServerChangeToken: previousChangeToken) 

//Hold the notification IDs we processed so we can tell CloudKit to never send them to us again 
var notificationIDs = [CKNotificationID]() 

operation.notificationChangedBlock = { [weak self] notification in 
    guard let notification = notification as? CKQueryNotification else { return } 
    if let id = notification.notificationID { 
    notificationIDs.append(id) 
    } 
} 

operation.fetchNotificationChangesCompletionBlock = { [weak self] newToken, error in 
    if let error = error{ 
    print(error) //<-- <!> This is the error <!> 
    }else{ 
    self?.previousChangeToken = newToken 

    //All records are in, now save the data locally 
    let fetchOperation = CKFetchRecordsOperation(recordIDs: recordIDs) 

    fetchOperation.fetchRecordsCompletionBlock = { [weak self] records, error in 
     if let e = error { 
     print("fetchRecordsCompletionBlock Error fetching: \(e)") 
     } 
     //Save records to local persistence... 
    } 

    self?.privateDB.add(fetchOperation) 

    //Tell CloudKit we've read the notifications 
    let operationRead = CKMarkNotificationsReadOperation(notificationIDsToMarkRead: notificationIDs) 
    self?.container.add(operationRead) 
    } 
} 

container.add(operation) 

を、エラーが言う:

私はこのようなCloudKitからの通知を追跡していますそのような選択肢はありません。

私は何をすべきか考えていますか?

答えて

1

このエラーコードはCKErrorCodeChangeTokenExpiredであり、変更を再同期する必要があることを示しています。

https://developer.apple.com/documentation/cloudkit/ckerror/2325216-changetokenexpired

このエラーコードは、変更トークンが古すぎるとき返される、またはコンテナが(コンテナをリセットすると、古い変更トークンを無効に)リセットされました。

このエラーコードに関連するコメントが含まれる:

(コード自体を記載する):

The previousServerChangeToken value is too old and the client must re-sync from scratch

(各種の操作完了/更新されたブロックをフェッチ):

If the server returns a CKErrorChangeTokenExpired error, the serverChangeToken used for this record zone when initting this operation was too old and the client should toss its local cache and re-fetch the changes in this record zone starting with a nil serverChangeToken.

+0

が意味をなします。ありがとう、Dave! –

関連する問題