首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >云套件订阅创建的CKRecord

云套件订阅创建的CKRecord
EN

Stack Overflow用户
提问于 2014-12-03 21:47:05
回答 1查看 766关注 0票数 3

我有一个使用Cloud的iOS应用程序。基本上,当一个CKRecord被删除时,首先创建CKRecord的人应该收到一个通知。为此,我正在创建一个订阅。

每件事似乎都以它应有的方式工作,除了当你创建一个记录时,你实际上是在订阅所有的记录。那么,谁创建记录并不重要,因为您将得到通知。我想我搞错了NSPredicate,也许有人能帮上忙?下面是我有的相关代码:

代码语言:javascript
复制
    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。然后,在回调方法中,我订阅并执行上面的代码。

EN

回答 1

Stack Overflow用户

发布于 2014-12-04 06:59:24

当查询recordID字段时,attributeValue也应该是recordID,而不是字符串。然后,对于attributeName过滤器,您不应该使用%@,而应该使用%K

代码语言:javascript
复制
    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。只需使用它来创建过滤器

代码语言:javascript
复制
    [[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
        }]

只需使用错误处理扩展此代码

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27282304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档