我未能成功地将核心数据用于我的设备上的应用和今天的小部件。
let url = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.mygroup.name").URLByAppendingPathComponent("fileName.sqllite")
var error: NSError? = nil
let options = [NSMigratePersistentStoresAutomaticallyOption: true,
NSInferMappingModelAutomaticallyOption: true,NSPersistentStoreUbiquitousContentNameKey:"SharedContainerName"
]
let s = coordinator?.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: options
, error: &error)
我添加了一个用于商店网址的组容器。我在模拟器上注意到我的持久协调器指向相同的sqllite文件
(URL:file:///Users/xxxx/Library/Developer/CoreSimulator/Devices/6Cxxxxxx/data/Containers/Shared/AppGroup/E65xxxxxx/fileName.sqllite))
这似乎在模拟器上工作正常,我可以在我的主应用程序中存储数据并在今天的小部件中获取它。当我在设备上运行代码时,文件位于不同的位置,数据库不同步(今天的小部件上没有数据)。
我的主要应用
(URL:file:/// private / var / mobile / Containers / Shared / AppGroup / 2CCXXX / CoreDataUbiquitySupport / mobile~F74XXX / SharedContainerName / 0E8XXXX /store/fileName.sqllite)))< / p>
今日小工具
(URL:file:/// private / var / mobile / Containers / Shared / AppGroup / 2CCXXX / CoreDataUbiquitySupport / mobile~F74XXX / SharedContainerName / 2FBYYYY /store/fileName.sqllite)))< / p>
我假设这应该没问题,因为它们应该由iCloud同步。小部件运行正常,但它没有数据(就像它没有同步)。现在调试这个很棘手,因为我在运行今天的小部件时无法获得控制台输出。当我从Xcode运行小部件而不是附加到正在运行的进程(我可以在控制台上获得任何输出的唯一方法)时,我收到错误核心数据iCloud:错误:初始同步通知返回错误BRCloudDocsErrorDomain错误12.我收到没有通知。也许iCloud和Core Data目前不适用于今天的小部件?我的应用和扩展程序中的核心数据代码是相同的,所以我认为我没有错误。
答案 0 :(得分:1)
根据Apple员工的this Apple Developer Forum message:
无法从iOS 8.0的扩展程序中访问iCloud
他补充说:
文档同步,我应该澄清,或者需要文件协调的任何内容。我不确定KVS或CloudKit
建议使用其他一些方法(plist,单独的文件等)将应用程序状态公开给扩展,这有点无聊。