继续在后台获取CloudKit

时间:2016-10-04 21:41:59

标签: ios background cloudkit

我的目标是能够在我的应用程序背景化时使用CloudKit保存记录。我首先获取我正在尝试修改的记录,修改它,然后保存它。我正在从我的app delegate的applicationDidEnterBackground进行此调用:

CKDatabase *db = [[CKContainer defaultContainer] privateCloudDatabase];
CKRecordID *recordId = [[CKRecordID alloc] initWithRecordName:@"record_a"];

[db fetchRecordWithID:recordId completionHandler:^(CKRecord * _Nullable record, NSError * _Nullable error) {
    // Doesn't get here until I foreground the app

    if (!record) // Doesn't exist yet so create it
    {
        record = [[CKRecord alloc] initWithRecordType:@"SaveData" recordID:recordId];
    }

    NSURL *fileURL = [NSURL fileURLWithPath:@"path/to/file"];
    CKAsset *saveAsset = [[CKAsset alloc] initWithFileURL:fileURL];
    record[@"saveAsset"] = saveAsset;

    [db saveRecord:record completionHandler:^(CKRecord * _Nullable record, NSError * _Nullable saveError) {
        // Doesn't get here until I foreground
    }];
}];

fetchRecordWithID调用的完成块在我再次前置应用程序之前不会被触发,这意味着在此之前不会调用saveRecord:call。

我尝试使用CKOperation版本的fetch并使用修改后的qualityOfService和queuePriority属性保存无效。还尝试设置longLived属性,但这也不起作用。我已经搜索了文档,并且找不到任何可以阻止在应用程序背景时阻止阻止的块。

我有其他代码可以在后台调用完成块,所以不确定为什么这会受到限制。有什么想法吗?

0 个答案:

没有答案