根据CloudKit概述:
CloudKit还允许您的用户使用他们的iCloud Apple ID匿名登录您的应用,而无需共享他们的个人信息.
我在他们的文档中找不到关于此功能的任何其他内容.我已经有了一个带有我自己后端的应用程序,因此我不需要任何CloudKit提供的后端即服务功能,但我想利用用户登录iCloud帐户,与我们目前使用Facebook和Twitter的方式大致相同.
是否可以使用CloudKit,或者您是否还必须利用其BAAS功能才能利用登录?
我已经制作了一个与CloudKit数据库交互的简单应用程序.基本上它只是一个日期选择器和两个按钮,第一个添加带有设置时间的新记录到数据库,第二个检索所有记录.除了所有操作都非常慢之外,这似乎工作正常.从saveRecord和performQuery获取响应大约需要10秒钟.我究竟做错了什么?以下是检索记录的代码.
@IBAction func retreiveButtonClick(sender: AnyObject) {
self.labelOutlet.text = "Waiting..."
func myHandler(results:[AnyObject]!, error:NSError!) {
if let err = error {
println("err: \(err.localizedDescription)")
} else {
self.labelOutlet.text = "Got \(results.count) results:"
for record in results {
let time = record.objectForKey("testTime") as NSDate
self.labelOutlet.text = self.labelOutlet.text + "\n\(time.description)"
}
}
}
var query = CKQuery(recordType:"TestTable", predicate:NSPredicate(value:true))
cloudDatabase.performQuery(query, inZoneWithID: nil, myHandler)
}
Run Code Online (Sandbox Code Playgroud)
我正在我的iPhone 5上测试它,它连接到本地WiFi.我注意到保存的记录在调用完成处理程序之前很久就出现在CloudKit Dashboard中(我有足够的时间来检查),所以我怀疑我在代码中做错了.
我可能会遗漏一些明显的东西.
如何创建一个CloudKit通知,其中包含有关您收到通知的CKRecord的详细信息?(即不仅仅是一个通用的"New Item Created!",而是一个带有记录标题的通知,例如"Jill and Jessica的生日派对!")
是否有正确的方法来为每个新记录更改创建一个带有新notification.alertBody的新订阅?这没有任何意义.
这会留下选项queryNotification.recordID从CloudKit(或我的本地商店)中提取数据并以某种方式将其添加到通知中?添加或更改已通知通知值的方法是什么?我错过了什么?
更新:Per Edwin的建议在这里是一个代码片段,但它不起作用.
let notification = CKNotificationInfo()
notification.alertBody = "Added: %@" as NSString
notification.alertLocalizationArgs = ["name"]
Run Code Online (Sandbox Code Playgroud) 我正在使用CloudKit来获取/存储数据,但也希望有一个本地持久层.CloudKit是否提供任何类型的本地存储功能?或者我应该使用NSUserDefaults(NSKeyedArchiver/NSKeyedUnarchiver)?
我一直在摆弄CloudKit一段时间了,但我找不到如何使用CKRecordZone的真实例子.我理解他们的能力(即分组记录,尤其是订阅记录),但是有人真的有使用它们的经验,并映射哪个概念?
谢谢
我有一系列CloudKit记录,并希望将记录ID存储到核心数据中,因此当我再次查询云时,我不会记下相同的记录.我只是做一个不包含核心数据记录的NSpRedicate.
但是,如果出现错误,如何将记录ID保存到核心数据.认为这是一个类型问题.
现行代码:
coreData.recordRecordID = self.cloudKitRecords[0].recordID as? String
Run Code Online (Sandbox Code Playgroud)
当前得到CKRecord作为String的错误总是失败,我并不感到惊讶.需要能够保存recordID然后从核心数据中获取recordID.
谢谢
我正在与cloudkit仪表板交互并查看我的应用程序收集的数据.
如何从仪表板(data-> csv或json)导出所有数据,以便我可以对其进行一些分析?
谢谢!
我有一个简单的CloudKit记录,它有两个字段,名称和等级.我希望能够对CloudKit进行查询,返回所有记录,但按等级分组.我知道我可以使用NSFetchResultsController执行此操作,但似乎无法使用CKQuery找到一种简单的方法.
获取的当前代码:
func fetchTeachers(_ completion: @escaping (_ teachers: [CKRecord]?, _ error: NSError?) -> () ) {
let query = CKQuery(recordType: TeacherType, predicate: NSPredicate(value: true))
query.sortDescriptors = [NSSortDescriptor(key:"Grade",ascending:true)]
publicDB.perform(query, inZoneWith: nil) { results, error in
completion(results, error as NSError?)
}
}
Run Code Online (Sandbox Code Playgroud) 今年推出了CloudKit共享,我正在努力实现它.
我正在使用UICloudSharingController和我在成功处理程序中保存共享及其根记录.但是,当我共享链接(例如通过iMessage)并在另一台设备(不同的iCloud帐户,相同版本)上打开它时,它会显示以下错误:
无法打开"分享"
您需要更新版本
APPNAME来打开它,但在App Store中找不到所需的版本.如果您不确定要使用哪个版本,请与所有者联系.
由于这是一个新的应用程序,它当然不在App Store中.我需要先测试共享(Chicken或egg?),所以任何人都知道如何测试CloudKit共享?
我的应用程序创建了一个pdf文件,我想使用swift 3以编程方式将该pdf文档保存到iCloud Drive.
对于示例,我在这里使用了一个文本文件来保存在iCloud Drive中.
这是我的代码:
func copyDocumentsToiCloudDrive() {
var error: NSError?
let iCloudDocumentsURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("myCloudTest")
do{
//is iCloud working?
if iCloudDocumentsURL != nil {
//Create the Directory if it doesn't exist
if (!FileManager.default.fileExists(atPath: iCloudDocumentsURL!.path, isDirectory: nil)) {
//This gets skipped after initial run saying directory exists, but still don't see it on iCloud
try FileManager.default.createDirectory(at: iCloudDocumentsURL!, withIntermediateDirectories: true, attributes: nil)
}
} else {
print("iCloud is NOT working!")
// return
}
if …Run Code Online (Sandbox Code Playgroud)