【发布时间】:2015-04-08 18:48:42
【问题描述】:
我目前已在我的应用中设置了 CloudKit,因此我正在使用以下代码的帮助添加新记录,
CKRecordID *recordID = [[CKRecordID alloc] initWithRecordName:@"stringArray"];
CKRecord *record = [[CKRecord alloc] initWithRecordType:@"Strings" recordID:recordID];
[record setObject:[NSArray arrayWithObjects:@"one", @"two", @"three", @"four", nil] forKey:@"stringArray"];
[_privateDatabase saveRecord:record completionHandler:nil];
但是,现在我希望能够获取具有相同记录类型“字符串”的所有记录,并将那些编译成 NSArray 的记录返回。我该怎么做呢?目前,我只知道如何使用recordID单独获取每条记录,这很麻烦,必须有更简单的方法。
[_privateDatabase fetchRecordWithID:recordID completionHandler:^(CKRecord *record, NSError *error) {
if (error) {
// Error handling for failed fetch from private database
}
else {
NSLog(@"ICLOUD TEST: %@", [record objectForKey:@"stringArray"]);
}
}];
【问题讨论】:
-
根据 CKQuery API Reference:“谓词基于格式字符串。您不能使用基于值或块的谓词。”我不认为总是这样,但目前这两个答案都不正确,因为他们使用
NSPredicate(value:) -
我过去使用过它,但根据 Apple 自己的文档,任何这样做的人都应该知道 CloudKit 不支持它。 Apple 可以很好地做出会破坏该代码的更改,并且可以在不使用基于值或块的谓词的情况下完成。
-
我认为这类似于通过哈希值识别枚举。你可以侥幸逃脱,直到声明顺序发生变化并且你的代码被破坏......基本上,制造商包括如何使用他们的 api 等的手册是有原因的......
标签: ios icloud cloudkit ckrecord