2015-06-04 69 views
0

我正在使用CloudKit在应用程序中工作,并且正在创建订阅CloudKit。这里是我的代码:CloudKit:查询订阅请求

CKSubscription *subscription = [[CKSubscription alloc] 
           initWithRecordType:recordType 
           predicate:predicate 
           options:CKSubscriptionOptionsFiresOnRecordCreation | 
           CKSubscriptionOptionsFiresOnRecordUpdate | 
           CKSubscriptionOptionsFiresOnRecordDeletion]; 


CKNotificationInfo *notificationInfo = [CKNotificationInfo new]; 
notificationInfo.shouldSendContentAvailable = YES; 
subscription.notificationInfo = notificationInfo; 
notificationInfo.shouldBadge = YES; 
CKDatabase *publicDatabase = [container publicCloudDatabase]; 
[publicDatabase saveSubscription:subscription 
       completionHandler:^(CKSubscription *subscription, NSError *error) { 
        if (!error) 
        { 
         NSLog(@"subscription success!"); 
        } 
        else 
        { 
         NSLog(@"subscription error%@", error.localizedDescription); 
        } 

       }]; 

我的问题给你们。我如何查询或验证用户订阅CloudKit?

回答

0

订阅只不过是在服务器端而不是在您的应用中激活的CKPredicate。如果要验证谓词是否正确,那么只需将其作为查询来执行,然后查看返回的结果。

确保您的应用程序difFinishLaunchingWithOptions有以下几行代码:

application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Alert | .Badge | .Sound, categories: nil)) 
    application.registerForRemoteNotifications() 

另外,还要确保你加入这个处理收到的通知:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 
    NSLog("Push received.. Should be handled..") 
} 
+0

喜@EdwinVermeer。我已经尝试了您的想法,并且谓词在tableview中正确工作,但与订阅无关。我怀疑这是我的订阅设置,因为我可以得到一个真正的谓词来工作。我的谓词涉及CKReference到当前用户,在那里我想获得其他用户对当前用户发表的评论的通知 - let predicate = NSPredicate(format:“user!=%@ AND userIDForPost =%@”,argumentArray :[userRef,userRef])'。 userRef是当前用户的ID,“user”是对其他用户的引用,userIDForPost是对当前用户的引用。超级赞赏任何帮助。 –

+0

我在答案中添加了一些信息。你有吗?除此之外,你是否在设备上使用iCloud? –

+0

是的,我在AppDelegate中有这些方法。并且该设备使用其他用户的帐户登录到iCloud。然后我进入仪表板并创建新记录以匹配我自己帐户下的谓词,我认为苹果公司建议这样做。过去几个月我尝试了很多东西,我开始怀疑这是否是一个错误。非常感谢你的帮助! @EdwinVermeer。 –