在iOS 8.3之后,如果记录是由当前帐户创建的,则其creatorUserRecordID将类似于
CKRecordID:[某些地址]; defaultOwner :(__ defaultZone: defaultOwner )
然后,如果使用CKDatabase中的fetchRecordWithID:completionHandler:来获取该recordID,它将始终返回错误,例如
CKError [某些地址]:“未知项目”(11/2003);服务器消息=“找不到记录”; uuid = [某些UUID];容器ID = [某些容器ID]
我以前从未遇到过这个问题。
是一个错误,还是我应该以其他方式从recordID( defaultOwner )中获取记录?
编辑(添加示例代码)
- (void)postMoodFeed:(NSString *)moodFeed
{
CKRecord *moodRecord = [[CKRecord alloc] initWithRecordType:@"Mood"];
moodRecord[@"moodFeed"] = moodFeed
[[[CKContainer defaultContainer] publicCloudDatabase] saveRecord:moodRecord completionHandler:^(CKRecord *record, NSError *error) {
[self queryMyMood];
}];
}
- (void)queryMyMood
{
// currentUserRecordID is fetched from fetchUserRecordIDWithCompletionHandler: of CKContainer
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"creatorUserRecordID = %@", currentUserRecordID];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Mood" predicate:predicate];
[[[CKContainer defaultContainer] publicCloudDatabase] performQuery:query inZoneWithID:nil completionHandler:^(NSArray *results, NSError *error) {
if (results) {
for (CKRecord *eachRecord in results) {
// Following logs are all __defaultOwner__
NSLog(@"%@", eachRecord.creatorUserRecordID.recordName);
[[[CKContainer defaultContainer] publicCloudDatabase]fetchRecordWithID:eachRecord.creatorUserRecordID completionHandler:^(CKRecord *record, NSError *error) {
// All following logs are "Unknown item" error
NSLog(@"%@", error);
}];
}
}
}];
}
EDIT 2015年7月2日
那是一个错误。
向苹果报告后,他们在iOS 9 Beta 2中修复了此问题。
最佳答案
实际上,它看起来像是新功能。
您可以做的是先测试eachRecord.creatorUserRecordID.recordName ==“ defaultOwner ”,如果是这种情况,则可以从currentUserRecordID中获取ID的记录
但是最好不要将creatorUserRecordID用于您的应用程序中的任何功能。您最好添加一个新的CKReference字段,并始终用currentUserRecordID填充它。这样,即使您有一个迁移数据的过程,您仍然会知道是谁最初创建了该记录。