我有一个使用Cloud的iOS应用程序。基本上,当一个CKRecord被删除时,首先创建CKRecord的人应该收到一个通知。为此,我正在创建一个订阅。
每件事似乎都以它应有的方式工作,除了当你创建一个记录时,你实际上是在订阅所有的记录。那么,谁创建记录并不重要,因为您将得到通知。我想我搞错了NSPredicate,也许有人能帮上忙?下面是我有的相关代码:
NSString *attributeName = @"recordID";
NSString *attributeValue = newRecord.recordID.recordName;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ like %@", attributeName, attributeValue];
CKSubscription *subscription = [[CKSubscription alloc] initWithRecordType:@"Photo" predicate:predicate options:CKSubscriptionOptionsFiresOnRecordDeletion];现在我明白了,attributeName for recordId实际上应该是类似于recordID.recordName的东西,但我也尝试过,但它没有起作用。我还是会得到同样的结果。我不知道最好的方法,但基本上我想要的是订阅只向CKRecord的创建者,当该记录已被删除。
请注意,我首先创建
CKRecord,然后将其上传到CloudKit。然后,在回调方法中,我订阅并执行上面的代码。
发布于 2014-12-04 06:59:24
当查询recordID字段时,attributeValue也应该是recordID,而不是字符串。然后,对于attributeName过滤器,您不应该使用%@,而应该使用%K
NSString *attributeName = @"recordID";
CKRecordID *attributeValue = [[CKRecordID alloc] initWithName:newRecord.recordID.recordName];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", attributeName, attributeValue];
CKSubscription *subscription = [[CKSubscription alloc] initWithRecordType:@"Photo" predicate:predicate options:CKSubscriptionOptionsFiresOnRecordDeletion];但是,当您有这样的逻辑时,您将为创建的每一条记录创建一个订阅。您可以通过一个泛型订阅来解决这个问题。只需为元数据字段creatorUserRecordID添加一个条件即可。然后,您必须先获取iCloud帐户中标记的iCloud,然后创建如下所示的订阅:
在容器上执行fetchUserRecordIDWithCompletionHandler。在回调中,您将收到一个recordID。只需使用它来创建过滤器
[[CKContainer defaultContainer] fetchUserRecordIDWithCompletionHandler:^(CKRecordID *recordID, NSError *error) {
NSString *attributeName = @"creatorUserRecordID";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", attributeName, recordID];
CKSubscription *subscription = [[CKSubscription alloc] initWithRecordType:@"Photo" predicate:predicate options:CKSubscriptionOptionsFiresOnRecordDeletion];
// ... rest of your code
}]只需使用错误处理扩展此代码
https://stackoverflow.com/questions/27282304
复制相似问题