我搜索过,我找不到一个例子.我也尝试过修改此代码(在别处推荐(CloudKit不会将我的徽章计数重置为0):
func resetBadgeCounter() {
let badgeResetOperation = CKModifyBadgeOperation(badgeValue: 0)
badgeResetOperation.modifyBadgeCompletionBlock = { (error) -> Void in
if error != nil {
print("Error resetting badge: \(String(describing: error))")
}
else {
UIApplication.shared.applicationIconBadgeNumber = 0
}
}
CKContainer.default().add(badgeResetOperation)
}
Run Code Online (Sandbox Code Playgroud)
这暂时有效,但不再受支持,很快就会消失.
我想也许我应该使用CKModfyRecordsOperation或其他一些CKDatabaseOperation,但我甚至无法猜测如何.
我为cloudkit设置了订阅通知.这是我的代码:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"TRUEPREDICATE"];
CKSubscription *subscription = [[CKSubscription alloc]
initWithRecordType:recordType
predicate:predicate
options:CKSubscriptionOptionsFiresOnRecordCreation];
CKNotificationInfo *notificationInfo = [CKNotificationInfo new];
notificationInfo.alertLocalizationKey =@"New record in cloudKit";
notificationInfo.shouldBadge = YES;
notificationInfo.soundName = UILocalNotificationDefaultSoundName;
notificationInfo.shouldSendContentAvailable = YES;
subscription.notificationInfo = notificationInfo;
CKContainer *container = [CKContainer defaultContainer];
CKDatabase *publicDatabase = [container publicCloudDatabase];
[publicDatabase saveSubscription:subscription
completionHandler:^(CKSubscription *subscription, NSError *error) {
if (!error)
{
NSLog(@"no error");
}
else
{
NSLog(@"error%@", error);
}
}];
Run Code Online (Sandbox Code Playgroud)
工作得很好.问题是徽章,他们看起来像cloudKit没有重置徽章号码,并且即使我将徽章计数设置为零,也会不断增加.
- (void)applicationDidBecomeActive:(UIApplication *)application
{
application.applicationIconBadgeNumber = 0;
}
Run Code Online (Sandbox Code Playgroud)
当应用程序收到新通知时,从0到5(每个新通知增加1,下一次将是6)
你们中的任何人都知道如何从cloudkit中跟踪正确的徽章数量(在Objective-C中)
我需要一种方法将CKQueryNotification连接到CKRecord或CKSubscription,这样我就可以在多种记录类型上接收更新/插入/删除.我成功收到CKNotifications,这是有效载荷:
{
ck = {
ce = 2;
cid = "<my cloud container id>";
nid = "<unknown guid>";
qry = {
dbs = 2;
fo = 1;
rid = "<the record id>";
sid = "<THIS IS THE SUBSCRIPTION ID>";
zid = "_defaultZone";
zoid = "_defaultOwner";
};
};
}
Run Code Online (Sandbox Code Playgroud)
我可以通过通知有效负载获取订阅ID,我可以将订阅ID绑定到知道记录类型的本地缓存,但我想使用CKFetchNotificationChangesOperation来检索未读通知,此时我只有一个CKQueryNotification对象.
CKQueryNotification对象只有一个CKRecordID,据我所知,我无法从CKRecordID获得CKRecord.我可以在我的容器中对我的所有CKRecord-> recordType执行查询,但这似乎不对.
任何帮助表示赞赏!