CKFetchRecordChangesOperation returns no records

南笙酒味 提交于 2020-01-01 19:21:12

问题


CKFetchRecordChangesOperation in the simplified method below does not return any records. I call it with a nil, to initially get all the records, but it only returns the server token. However, if I use CKQuery I get all the records correctly.

What am I missing?

 func fetchChangedRecords(token :CKServerChangeToken?) {

    println("\(__FUNCTION__) token: \(token)")

    let zoneID = CKRecordZoneID(zoneName: kMyZone, ownerName: CKOwnerDefaultName)
    var op = CKFetchRecordChangesOperation(recordZoneID: zoneID, previousServerChangeToken: token)

    op.recordChangedBlock = {
        record in
        println("\(__FUNCTION__) record \(record)")
    }

    op.recordWithIDWasDeletedBlock = {
        recordID in
        println("\(__FUNCTION__) record \(recordID)")

    }

    op.fetchRecordChangesCompletionBlock = {
        serverChangeToken, clientChangeToken, error in

        println("\(__FUNCTION__) server token  \(serverChangeToken), clientChangeToken \(clientChangeToken)")

        if let err = error {
            println("\(__FUNCTION__) Error: \(err)")
        }

         if op.moreComing {
            println("\(__FUNCTION__) moreComing")
            self.fetchChangedRecords(serverChangeToken)
        }
    }

    println("\(__FUNCTION__) op \(op)")

    privateDB.addOperation(op)
}

EDIT:

So, I updated the code with a an additional method call based on the value of moreComing. This below is what's printed. I also checked that the zone is there.

moreComing does not seem to be set.

fetchChangedRecords token: nil 
fetchChangedRecords op <CKFetchRecordChangesOperation: 0x16dd3e30; operationID=14A302B7-2718-4E05-97C7-B28EC01ED75B> 
fetchChangedRecords server token  <CKServerChangeToken: 0x16ddfd80; data=AQAAAAAAAAACf/////////+p9bdUdAhLUK36bhza7+4g>, clientChangeToken nil 

Just to show that the zone is there.

zone fetching succeeded [<CKRecordZone: 0x16dda330; zoneID=MyZone:__defaultOwner__, capabilities=(Atomic,Sync)>, <CKRecordZone: 0x16d5bb70; zoneID=_defaultZone:__defaultOwner__, capabilities=(none)>]

回答1:


Looks like CKFetchRecordChangesOperation is deprecated. I think it may have been replaced by CKFetchDatabaseChangesOperation and CKFetchRecordZoneChangesOperation? CKFetchDatabaseChangesOperation is discussed in 2016 WWDC Best Practices, but it's in the context of shared databases.



来源:https://stackoverflow.com/questions/29140726/ckfetchrecordchangesoperation-returns-no-records

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!