鉴于iOS通讯簿API或其他App Store友好的API,是否可以find同样使用iOS的用户联系人? 我能够想出的唯一启发就是find所有具有kABPersonPhoneIPhoneLabel电话号码的联系人 – 但是这种方法有很多误报和否定。
我正在通过一个应用程序将数据从外部Web服务转移到私有CloudKit数据库。 该应用程序是一个单用户应用程序,但是我遇到了一个竞争条件,我不知道如何避免。 我的外部数据中的每条logging都有一个唯一的标识符映射到我的CKRecord实例。 一般的应用程序启动stream程是: 获取相关loggingtypes的当前CKRecords。 获取外部logging。 对于每个外部logging,如果在CloudKit中不存在,则通过批量创build(修改操作)创build它。 现在的问题是,如果同时在用户的两台设备上启动这个进程,由于CK和外部提取都是asynchronous的,所以很有可能会得到重复的logging。 我知道我可以使用区域自动提交所有的CKRecord实例,但我不认为这解决了我的问题,因为如果所有这些提取都发生在同一时间,保存并不是真正的问题。 我的问题是: 有没有人知道一种方法来“locking”私人数据库的所有用户的设备写入? 另外,有没有办法强制在任何CKRecord字段唯一性? 或者,有没有办法使用自定义值作为主键,在这种情况下,我可以使用我的外部ID作为CK ID,并允许系统本身防止重复。 我在这里先向您的帮助表示感谢!
如果用户未打开iCloud Drive,哪些CloudKit服务不可用? 有没有办法打开从应用程序的iCloud驱动器? 我猜从公共容器下载logging应该工作,无论iCloud驱动器,只有启用时写容器?!
有没有办法让iOS在用户拒绝后再次提示CKApplicationPermissionUserDiscoverability? 我所能做的最多的就是删除OS X中的iCloud设置窗格的权限,这个窗口只是在没有任何用户交互的情况下向iOS应用程序返回一个拒绝。 我正在写的应用程序是没有发现性的,所以我希望能够再次提示用户最初说不。
我是CloudKit和iOS开发的新手。 我已经手动添加了一些logging到CloudKit Dashboard,现在我想通过自动创build的ID检索它们。 然后我想显示一个logging的值在一个静态tableview单元格的UILabel。 有两个问题:1)。 从控制面板使用ID时,出现xCode错误(错误显示为“expected”,“separator”); 和2)。 我找不到在静态tableview单元格中的UILabellogging值的任何示例。 (特别是快速)。 任何帮助是极大的赞赏! 这是我的代码: override func viewDidLoad() { super.viewDidLoad() publicDB.fetchRecordWithID (f7080e7a-f8c3-4db6-b8ee-642a011a6762) { record, error in if error != nil { println("there was an error \(error)") } else { // this is my UILabel in a static tableview. The record's only attribute is //called "subCategory" plasticOneValue.text = record["subCategory"] } […]
从CloudKit下载CKRecord ,并绘制创build者recordName ,我可以看到: (lldb) po record.creatorUserRecordID.recordName __defaultOwner__ 但仪表板显示出真正的价值。 为什么区别? 我希望我不必仅仅因为这个login的用户而下载?!
有没有人有经验使用CloudKit选项DeleteSelf的CKReference ? 以下是我从文档中获得的内容: DeleteSelf 引用logging的删除操作。 删除logging还会删除包含指向该logging的CKReference对象的任何logging。 删除其他logging可能会触发级联删除更多logging。 这些删除在默认区域中是asynchronous的,在自定义区域中是立即的。 所以我一直在testing这个,我已经使用CloudKit Dashboard和使用我的应用程序创build了多个CKReference对象。 每当我用我的应用程序做,我创build的参考如下所示: let reference:CKReference = CKReference(recordID: savedFriend.friendID, action: CKReferenceAction.DeleteSelf) 我知道它被指定为删除自己,因为在仪表板中它显示选项被选中: 我必须做错事,因为每当我去手动删除使用仪表板引用的logging,或者设置我的应用程序以编程方式删除它,logging消失,但引用永远不会被删除。 我想也许我应该等待,最终会发生,但几个小时后,它仍然在检查,像它应该已经删除本身。 这是有点令人沮丧,因为我devise了一些我的代码假设这将工作,现在我可以有一个应用程序浪费资源,试图find一个不存在的CKRecord了。 我不应该依靠这个来工作吗? 我感谢任何帮助或build议,我可以得到。 更新〜04/07/2016 我跳了枪回到这里,并发布了一个更新,这个问题已经解决了。 我并不完全相信这个问题不会回弹,所以我昨晚寻求一些安慰。 我创build了5个不同的CKRecords并创build了各种不同的CKReference对象来在我的数据库中引用它们。 然后我开始在每个引用上设置CKReferenceAction.DeleteSelf选项(我通过仪表板手动尝试了两个,其他三个以编程方式完成)。 无论如何,我等了几分钟,然后删除引用logging…十分钟后,参考文献仍然存在。 我又等了5-10分钟,他们还在那里,所以我上床睡觉,早上一定要走了,对不对? 错误! 十二个小时后, CKReference条目仍然存在 ,引用的logging仍然消失。 我肯定是在挠头,似乎是CloudKit的一个bug。 我应该提到,我也注意到我的仪表板中有一些奇怪的行为。 在过去的四天左右,在左下angular一直说它是“重build发展数据”,这里是一个例子: 这可能会导致这个问题? 有没有人熟悉这个问题,并知道解决这个问题的方法? 任何build议,将不胜感激。 我已经向苹果提交了一个错误报告。
我正在使用一个CKFetchRecordChangesOperation CKFetchRecordsChangeToken抓住变化,它告诉我,“AppDefaultZone不支持同步语义”。 这是有问题的代码: – (void)downloadServerChangesWithCompletionBlock:(void (^)(NSError *error))completionBlock { // Prepare to fetch remote changes CKDatabase *database = [CKContainer defaultContainer].privateCloudDatabase; CKRecordZoneID *zoneID = [[CKRecordZoneID alloc] initWithZoneName:CKRecordZoneDefaultName ownerName:CKOwnerDefaultName]; // Initialize fetch record changes operation CKFetchRecordChangesOperation *fetchRecordChangesOperation = [[CKFetchRecordChangesOperation alloc] initWithRecordZoneID:zoneID previousServerChangeToken:[self changeToken]]; fetchRecordChangesOperation.recordChangedBlock = ^(CKRecord *record) { [self performRecordChange:record]; }; fetchRecordChangesOperation.recordWithIDWasDeletedBlock = ^(CKRecordID *recordID){ [self performRecordDeletion:recordID]; }; […]
在模拟器中保存一个CKRecord给我以下错误: [publicDatabase saveRecord:cloudRouteEntity completionHandler:^(CKRecord *record, NSError *error) { if (error) { NSLog(@"An error occured in %@: %@", NSStringFromSelector(_cmd), error); abort(); } else { dispatch_async(dispatch_get_main_queue(), ^(void) { //gui NSLog(@"Created Cloudkit Entity"); }); } }]; 但是,它在电话上工作。 为什么模拟器无法访问CloudKit数据库? 编辑:我想我会聪明的通过添加iCloud帐户的模拟器 – 但iCloud呻吟,这是不允许在“这个设备”(模拟器)。 想法任何人?
我遇到这个问题,我使用CloudKit将某些内容保存到icloud,但是立即读取结果不会返回插入的最新数据。 例 let todoRecord = CKRecord(recordType: "Todos") todoRecord.setValue(todo, forKey: "todotext") publicDB.saveRecord(todoRecord, completionHandler: { (record, error) -> Void in NSLog("Saved in cloudkit") let predicate = NSPredicate(value: true) let query = CKQuery(recordType: "Todos", predicate: predicate) self.publicDB.performQuery(query, inZoneWithID: nil) { results, error in if error != nil { dispatch_async(dispatch_get_main_queue()) { self.delegate?.errorUpdating(error) return } } else { NSLog("###### fetch […]