标签: cloudkit

CloudKit不适用于Simulator

最近我一直无法让iOS模拟器处理我在CloudKit仪表板中创建的记录.有趣的是,它适用于真实设备,但不适用于模拟器.CloudKit Dashboard表示它是一个开发环境.当我使用模拟器运行我的应用程序时,我得到以下两个错误之一:

错误域= NSCocoaErrorDomain代码= 4097"操作无法完成.(Cocoa错误4097.)"(连接到名为com.apple.cloudd的服务)UserInfo = 0x7a276d40 {NSDebugDescription =连接到名为com.apple.cloudd的服务}

或者我明白了

错误:CKError 0x7b658890:"请求率限制"(7/2008); "这项行动受到了限制"; 3.0秒后重试

知道导致这个问题的原因是什么吗?

谢谢!

objective-c ios ios-simulator ios8 cloudkit

9
推荐指数
1
解决办法
2995
查看次数

在CloudKit中保存对象数组

我对如何最好地保存包含CloudKit中其他对象数组的对象感到困惑.

假设我有一个待办事项列表应用程序,它有不同的项目集合.我如何保存/获取整个项目集合?

我是否有一个Record类型的Collection,它有一个名为"Name"的String属性,然后是一个名为"Items"的引用列表属性?

我知道Record类型的Item需要有一个名为"Collection"的引用属性,因为CloudKit如何从子对象引用它的父对象.

我已设法使用以下代码保存没有任何Item实例的集合

func addCollection(collection: Collection!, completion: (error: NSError!) -> ()) {
    if collection == nil
        return
    }
    let collectionRecord = CKRecord(recordType: "Collection")
    CollectionRecord.setObject(collection.name, forKey: "Name")
    privateDB.saveRecord(collectionRecord) {
        record, error in
        dispatch_async(dispatch_get_main_queue()) {
           completion(error: error)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

另一个选项是在保存Collection时,循环遍历Item的所有实例并单独保存它们,它们的Reference Attribute to Collection在CloudKit端进行连接,但这似乎是太多的网络调用.

swift ios8 cloudkit ckreference

9
推荐指数
1
解决办法
2584
查看次数

字段'___recordID'未标记为可查询

我尝试下载具有特定recordType的所有记录,其中recordID与某个记录不匹配.

但是我收到了一个错误.任何的想法?我以为我可以将只能手动添加的字段标记为可查询.

<CKError 0x15df2a10: "Invalid Arguments" (12/2015); server message = "Field '___recordID' is not marked queryable"; uuid = ECDD0C97-550F-4DD5-942D-AF4DF8917EEB; container ID = "iCloud.com.kukodajanos.Movie-Buffs">

let query = CKQuery(recordType: "UserSetting", predicate: NSPredicate(format: "recordID != %@", CKRecordID(recordName: loggedInUserRecordName!)))

ios cloudkit

9
推荐指数
1
解决办法
3305
查看次数

多平台MBa类似于CloudKit?

我也需要在Android中实现基于CloudKit的应用程序.

哪些MBaas具有与CloudKit最相似的架构?我需要这些功能:

  • 级联删除
  • 能够从用令牌表示的日期跟踪表中的插入/更新/删除更改
  • 资产管理
  • 基于光标的记录提取/分页,跳过
  • 可扩展(不需要像操作那样的连接/应该是可能的)
  • 能够得到关于变化的推送通知
  • 初创公司的合理定价
  • 基于云
  • 没有服务器端逻辑
  • 不提供客户端存储,我有它
  • 简单的仪表板/没有性能图表等.

android parse-platform azure-mobile-services cloudkit

9
推荐指数
1
解决办法
417
查看次数

CloudKit推送通知didReceiveRemoteNotification从未调用过

我正在使用CloudKit来存储用户数据,并希望在更改记录或创建新记录时获得推送通知.但它不起作用......

注册了这样的订阅:

- (void) updateCloudSubscriptions {

    NSPredicate *allPredicate = [NSPredicate predicateWithFormat:@"TRUEPREDICATE"];
    CKSubscription *newOrUpdateSubscription = [[CKSubscription alloc]
        initWithRecordType:kMyRecordType predicate:allPredicate options:
        (CKSubscriptionOptionsFiresOnRecordCreation | CKSubscriptionOptionsFiresOnRecordUpdate)];
    CKNotificationInfo *newOrUpdateNotificationInfo = [CKNotificationInfo new];
    newOrUpdateNotificationInfo.shouldBadge = NO;
    newOrUpdateNotificationInfo.shouldSendContentAvailable = YES;
    newOrUpdateSubscription.notificationInfo = newOrUpdateNotificationInfo;

    CKDatabase *publicDatabase = [[CKContainer containerWithIdentifier:kMyContainerID] 
        publicCloudDatabase];
    [publicDatabase saveSubscription:newOrUpdateSubscription 
         completionHandler:^(CKSubscription *theSubscription, NSError *saveError) {
        if (saveError){
            //error handling
        }
        NSLog(@"Subscription created");
    }];
}
Run Code Online (Sandbox Code Playgroud)

这成功了.在CloudKit仪表板上,正确创建订阅.

在我的AppDelegate中,我现在有以下内容:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    UIUserNotificationSettings *notificationSettings = [UIUserNotificationSettings settingsForTypes:
        (UIUserNotificationTypeNone | UIUserNotificationTypeAlert …
Run Code Online (Sandbox Code Playgroud)

macos objective-c apple-push-notifications ios cloudkit

9
推荐指数
2
解决办法
2629
查看次数

如何查询CloudKit的recordID IN [CKRecordID]

我的谓词想要排除已经下载并在[CKRecordID]中可用的一些记录.现在我可以查询1个CKRecordID [0],但不能查询[CKRecordID]数组.我该如何查询数组?

let excludeIDs: [CKRecordID]
Run Code Online (Sandbox Code Playgroud)

这有效:

let pred1 = NSPredicate(format: "NOT(recordID = %@)", excludeIDs[0])
Run Code Online (Sandbox Code Playgroud)

但这不是:

let pred1 = NSPredicate(format: "NOT(recordID IN %@)", excludeIDs)
Run Code Online (Sandbox Code Playgroud)

错误:loadImageCompareRecordIDsAndEndDateThatHaveNotEnded错误:无效谓词:无效谓词:数组成员必须符合CKRecordValue :("","","","","")(CKRecordID)

代码的其他一般部分:

    let sort = NSSortDescriptor(key: "creationDate", ascending: false)
    let query = CKQuery(recordType: MyRecordTypes.ImageCompare, predicate: pred1)
    query.sortDescriptors = [sort]
    let operation = CKQueryOperation(query: query)
    operation.desiredKeys = ["endDate"]
    operation.resultsLimit = 50
Run Code Online (Sandbox Code Playgroud)

nspredicate ios cloudkit ckquery ckrecord

9
推荐指数
1
解决办法
1709
查看次数

您可以在不同的应用程序之间共享CloudKit上的数据吗?

我在应用商店中有我的应用的免费和付费版本.我正在更新应用程序以使用CloudKit共享一些公共数据.我希望免费和付费应用分享相同的数据.

首先,两个应用程序可以与CloudKit共享相同的数据吗?

如果是这样,我怎么能让它工作?我尝试在两个目标的功能中启用CloudKit,并在两个应用程序中选择相同的容器.选择"使用默认容器"的主应用程序工作正常,但我选择"指定自定义容器"并从第一个目标中选择自定义容器的另一个应用程序在我尝试下载任何内容时收到错误.

ios cloudkit

9
推荐指数
1
解决办法
1757
查看次数

每个iCloud用户如何在CloudKit中保存用户特定的订阅?

我在公共CloudKit数据库中创建订阅时遇到问题.在为第一个iCloud用户保存订阅时,代码工作正常,但是对于第二个iCloud用户尝试为相同的记录类型保存稍微不同的订阅失败.

这是保存订阅的代码(Swift中的答案也很好):

CKNotificationInfo *info = [[CKNotificationInfo alloc] init];
info.shouldSendContentAvailable = YES;

CKReference *ref = [[CKReference alloc] initWithRecordID:_ckUserID action:CKReferenceActionNone];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"user == %@", ref];
NSString *subId = [NSString stringWithFormat:@"access-%@", _ckUserID.recordName];

CKSubscription *sub = [[CKSubscription alloc] initWithRecordType:@"access" predicate:pred subscriptionID:subId options:CKSubscriptionOptionsFiresOnRecordCreation | CKSubscriptionOptionsFiresOnRecordUpdate | CKSubscriptionOptionsFiresOnRecordDeletion];
sub.zoneID = [CKRecordZone defaultRecordZone].zoneID;
sub.notificationInfo = info;

CKModifySubscriptionsOperation *op = [[CKModifySubscriptionsOperation alloc] initWithSubscriptionsToSave:@[ sub ] subscriptionIDsToDelete:nil];
op.modifySubscriptionsCompletionBlock = ^(NSArray<CKSubscription *> *savedSubscriptions, NSArray<NSString *> *deletedSubscriptionIDs, NSError *operationError) {
    if (operationError) {
        RMLogError(@"Error trying to update user's …
Run Code Online (Sandbox Code Playgroud)

ios cloudkit cksubscription

9
推荐指数
1
解决办法
743
查看次数

如何在CloudKit中使用资产?

我正在尝试将CloudKit与资产一起使用.

我创建的RecordType包含iCloud开发人员仪表板中的资产.

然后,我在公共数据库的默认区域中创建了一条记录,并将文件上传到记录的资产.

我写了这段代码来获取记录.

CKContainer *defaultContainer =[CKContainer defaultContainer];
CKDatabase *publicDatabase = [defaultContainer publicCloudDatabase];
CKRecordID *wellKnownID = [[CKRecordID alloc]
                           initWithRecordName:@"RECORDKEY"];

[publicDatabase fetchRecordWithID:wellKnownID
                completionHandler:^(CKRecord *fetchedParty, NSError *error) {
                    NSLog(@"erorr : %@", error)
                }];
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息.

2014-06-28 21:42:50.148 AppName [10634:1068121] erorr:<CKError 0xc81b4a0:"内部错误"(1/5001); "记录<CKRecordID:0xc035b50; RECORDKEY:(_ defaultZone:__ defaultOwner __)>具有需要加密但未在记录上找到保护数据的项目">

什么是"保护数据"?我应该在上传之前加密数据吗?

assets ios icloud cloudkit

8
推荐指数
1
解决办法
1126
查看次数

每天从特定记录类型中删除所有记录CloudKit

所以我想每天擦除特定记录类型的每条记录.所以基本上,我希望在凌晨12点擦除数据,以便第二天新鲜.我该怎么做呢?这是我可以在CloudKit仪表板中设置的,还是我必须以编程方式设置它?

ios swift cloudkit

8
推荐指数
3
解决办法
4080
查看次数