- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
因此,几周来我一直在尝试使用 Core Data 和 iCloud 在两个 iDevice 之间同步数据。苹果的documentation from 2012/2013 是用Objective-C写的,不是很详细。
我曾尝试将其转换为适用于 iOS9 的 Swift 2.0。首先,我想我可能已经完成了,两台设备共享数据并同步任何更改。然后事情变得一团糟,之前删除的数据开始出现,同步的唯一方法是重新启动应用程序。现在我遇到了这个错误:
CoreData: Ubiquity: Librarian returned a serious error for starting downloads Error Domain=BRCloudDocsErrorDomain Code=6 "Path is outside of any CloudDocs container, will never sync"
如果我继续通过 Xcode(7) 运行该应用程序,它似乎会自行修复并同步更改,但这对于现实世界来说并不理想;用户不必强制退出应用程序并重新启动以进行同步,如果数据损坏则重新安装。
是否有人知道我哪里可能出错以及为什么会出现此错误?
完整错误:
2015-09-08 22:21:53.679 APPNAME[5550:407392] - [PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](874): CoreData: Ubiquity: nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B:APPNAMEStore
Using local storage: 1 for new NSFileManager current token <766b5e5c 3c205110 52c05248 38a47bd9 aca1ee87>
2015-09-08 22:21:57.639 APPNAME[5550:407392] storesDidChange posting notif
2015-09-08 22:21:57.639 APPNAME[5550:407452] -[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](874): CoreData: Ubiquity: nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B:APPNAMEStore
Using local storage: 0 for new NSFileManager current token <766b5e5c 3c205110 52c05248 38a47bd9 aca1ee87>
2015-09-08 22:21:58.565 APPNAME[5550:407476] __45-[PFUbiquityFilePresenter processPendingURLs]_block_invoke(447): CoreData: Ubiquity: Librarian returned a serious error for starting downloads Error Domain=BRCloudDocsErrorDomain Code=6 "Path is outside of any CloudDocs container, will never sync" UserInfo={NSDescription=Path is outside of any CloudDocs container, will never sync, NSFilePath=/Users/USER/Library/Developer/CoreSimulator/Devices/19DE5FBA-9248-410D-9264-6B434B30F8CA/data/Containers/Data/Application/D00DA341-E9A5-4C65-82B4-41EFC5638ED3/Documents/CoreDataUbiquitySupport/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/DD2F75D5-FEAF-482A-A896-657936AFCFCD/container/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/NiGeopr_A~01pLnJTYkIei3RCNWt5FiSp0~iJS1V9eo=/38201B1B-7F78-4683-8604-D8F79D1F895B.1.cdt} with userInfo {
NSDescription = "Path is outside of any CloudDocs container, will never sync";
NSFilePath = "/Users/USER/Library/Developer/CoreSimulator/Devices/19DE5FBA-9248-410D-9264-6B434B30F8CA/data/Containers/Data/Application/D00DA341-E9A5-4C65-82B4-41EFC5638ED3/Documents/CoreDataUbiquitySupport/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/DD2F75D5-FEAF-482A-A896-657936AFCFCD/container/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/NiGeopr_A~01pLnJTYkIei3RCNWt5FiSp0~iJS1V9eo=/38201B1B-7F78-4683-8604-D8F79D1F895B.1.cdt";
} for these urls: {(
file:///Users/USER/Library/Developer/CoreSimulator/Devices/19DE5FBA-9248-410D-9264-6B434B30F8CA/data/Containers/Data/Application/D00DA341-E9A5-4C65-82B4-41EFC5638ED3/Documents/CoreDataUbiquitySupport/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/DD2F75D5-FEAF-482A-A896-657936AFCFCD/container/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/NiGeopr_A~01pLnJTYkIei3RCNWt5FiSp0~iJS1V9eo=/38201B1B-7F78-4683-8604-D8F79D1F895B.1.cdt
)}
2015-09-08 22:21:58.566 APPNAME[5550:407452] __45-[PFUbiquityFilePresenter processPendingURLs]_block_invoke(447): CoreData: Ubiquity: Librarian returned a serious error for starting downloads Error Domain=BRCloudDocsErrorDomain Code=6 "Path is outside of any CloudDocs container, will never sync" UserInfo={NSDescription=Path is outside of any CloudDocs container, will never sync, NSFilePath=/Users/USER/Library/Developer/CoreSimulator/Devices/19DE5FBA-9248-410D-9264-6B434B30F8CA/data/Containers/Data/Application/D00DA341-E9A5-4C65-82B4-41EFC5638ED3/Documents/CoreDataUbiquitySupport/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/DD2F75D5-FEAF-482A-A896-657936AFCFCD/container/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/NiGeopr_A~01pLnJTYkIei3RCNWt5FiSp0~iJS1V9eo=/09F9706A-4479-47BF-B26D-DEBF92C55E48.1.cdt} with userInfo {
NSDescription = "Path is outside of any CloudDocs container, will never sync";
NSFilePath = "/Users/USER/Library/Developer/CoreSimulator/Devices/19DE5FBA-9248-410D-9264-6B434B30F8CA/data/Containers/Data/Application/D00DA341-E9A5-4C65-82B4-41EFC5638ED3/Documents/CoreDataUbiquitySupport/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/DD2F75D5-FEAF-482A-A896-657936AFCFCD/container/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/NiGeopr_A~01pLnJTYkIei3RCNWt5FiSp0~iJS1V9eo=/09F9706A-4479-47BF-B26D-DEBF92C55E48.1.cdt";
} for these urls: {(
file:///Users/USER/Library/Developer/CoreSimulator/Devices/19DE5FBA-9248-410D-9264-6B434B30F8CA/data/Containers/Data/Application/D00DA341-E9A5-4C65-82B4-41EFC5638ED3/Documents/CoreDataUbiquitySupport/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/DD2F75D5-FEAF-482A-A896-657936AFCFCD/container/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/NiGeopr_A~01pLnJTYkIei3RCNWt5FiSp0~iJS1V9eo=/09F9706A-4479-47BF-B26D-DEBF92C55E48.1.cdt,
file:///Users/USER/Library/Developer/CoreSimulator/Devices/19DE5FBA-9248-410D-9264-6B434B30F8CA/data/Containers/Data/Application/D00DA341-E9A5-4C65-82B4-41EFC5638ED3/Documents/CoreDataUbiquitySupport/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/DD2F75D5-FEAF-482A-A896-657936AFCFCD/container/nobody~sim73E13D94-AB95-59FB-AF18-ADC7BC05B47B/APPNAMEStore/NiGeopr_A~01pLnJTYkIei3RCNWt5FiSp0~iJS1V9eo=/8DACD654-5C84-4699-B512-078D46E51947.1.cdt
)}
2015-09-08 22:22:02.865 APPNAME[5550:407497] mergeChanges notif:NSConcreteNotification 0x7fc53c926e80 {name = com.apple.coredata.ubiquity.importer.didfinishimport; object = <NSPersistentStoreCoordinator: 0x7fc53ae36700>; userInfo = {
deleted = "{(\n)}";
inserted = "{(\n)}";
updated = "{(\n)}";
}}
ICloud 的核心数据堆栈
// MARK: - Core Data stack
// This handles the updates to the data via iCLoud updates
func registerCoordinatorForStoreNotifications (coordinator : NSPersistentStoreCoordinator) {
let nc : NSNotificationCenter = NSNotificationCenter.defaultCenter();
nc.addObserver(self, selector: "StoresWillChange:",
name: NSPersistentStoreCoordinatorStoresWillChangeNotification,
object: coordinator)
nc.addObserver(self, selector: "StoresDidChange:",
name: NSPersistentStoreCoordinatorStoresDidChangeNotification,
object: coordinator)
nc.addObserver(self, selector: "StoreChangedUbiquitousContent:",
name: NSPersistentStoreDidImportUbiquitousContentChangesNotification,
object: coordinator)
}
// Subscribe to NSPersistentStoreCoordinatorStoresWillChangeNotification
// most likely to be called if the user enables / disables iCloud
// (either globally, or just for your app) or if the user changes
// iCloud accounts.
func StoresWillChange (notification:NSNotification) {
managedObjectContext.performBlock { () -> Void in
if self.managedObjectContext.hasChanges {
do {
try self.managedObjectContext.save()
} catch {
print("error saving Managed Object Context in AppDelegate")
}
} else{
// drop any manged object refrences
self.managedObjectContext.reset()
}
}
}
// Subscribe to NSPersistentStoreCoordinatorStoresDidChangeNotification
func StoresDidChange(notification: NSNotification) {
// here is when you can refresh your UI and
// load new data from the new store
NSLog("storesDidChange posting notif");
NSNotificationCenter.defaultCenter().postNotificationName("storeDidChange", object: nil)
}
func mergeChanges(notification: NSNotification) {
NSLog("mergeChanges notif:\(notification)")
self.managedObjectContext.performBlock {
self.managedObjectContext.mergeChangesFromContextDidSaveNotification(notification)
}
}
func StoreChangedUbiquitousContent(notification: NSNotification) {
self.mergeChanges(notification);
}
lazy var applicationDocumentsDirectory: NSURL = {
// The directory the application uses to store the Core Data store file. This code uses a directory named "com.USER.swift2-iCloud" in the application's documents Application Support directory.
let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
return urls[urls.count-1]
}()
lazy var managedObjectModel: NSManagedObjectModel = {
let modelURL = NSBundle.mainBundle().URLForResource("APPNAME", withExtension: "momd")!
return NSManagedObjectModel(contentsOfURL: modelURL)!
}()
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator? = {
// Create the coordinator and store
var coordinator: NSPersistentStoreCoordinator? = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("APPNAME.sqlite")
var error: NSError? = nil
var failureReason = "There was an error creating or loading the application's saved data."
// iCloud store
var storeOptions = [NSPersistentStoreUbiquitousContentNameKey : "APPNAMEStore",NSMigratePersistentStoresAutomaticallyOption: true,
NSInferMappingModelAutomaticallyOption: true]
do {
try coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: NSURL.fileURLWithPath(url.path!), options: storeOptions)
} catch var error1 as NSError {
error = error1
coordinator = nil
// Report any error we got.
var dict = [String: AnyObject]()
dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"
dict[NSLocalizedFailureReasonErrorKey] = failureReason
dict[NSUnderlyingErrorKey] = error
error = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
// Replace this with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog("Unresolved error \(error), \(error!.userInfo)")
abort()
} catch {
fatalError()
}
self.registerCoordinatorForStoreNotifications (coordinator!)
return coordinator
}()
最佳答案
我之前遇到过同样的问题。我花了半天时间检查代码,结果发现我使用了错误的 iCloud 容器名称。我在开发环境中有一个应用程序,其名称与生产环境中的非常相似。
关于ios - iCloud 和核心数据 - "Path is outside of any CloudDocs container, will never sync",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32467799/
我是 icloud 新手。我正在开发一个应用程序。在我的应用程序中,我想将图片备份到 iCloud 服务器。但我不想将这些图像传回我的 iPhone。 这可能吗?怎么可能呢。我是 iCloud 新手。
我对 iCloud 很陌生——我制作了一个容器,然后在其中创建了一个记录类型。然后部署到生产。 好吧,我不再想要这种记录类型,所以我尝试删除它。 Invalid attempt to delete a
我已经在 icloud 中复制了我的 sqlite 数据库,我想使用该 icloud sqlite 数据库作为插入/更新和删除。我为它编写了代码,但它在其他设备上不起作用(我有 2 个设备)。意味着当
当本地商店更改为 iCloud 商店时,我正在尝试接收消息。 这是一个关键事件。所以我的用例是一个新设备在从一个空的商店开始后接收 iCloud 商店。我想通知 View 更新接收到的内容。 我像这样
我试图让 iCloud 中的键值存储正常工作,但我遇到了一个奇怪的问题。 我使用以下方式存储数据: [[NSUbiquitousKeyValueStore defaultStore] setObjec
我遇到了有关 iCloud 同步过程的问题。 当用户决定激活 iCloud 时,本地存储在应用程序沙箱中的文档将移动到本地 iCloud 目录,然后删除沙箱中的文件。这是通过 setUbiquitou
我对 iCloud 的想法有点纠结,并发布了一个更一般的问题 here .我最大的问题是决定是否应该停止将用户数据放在应用程序沙箱中的旧文档文件夹中。为了说明我的问题: docs据我所知,不要给出答案
嗨,我开发了一个 iPhone 应用程序,我将 NSMutableArray 存储到 NSUserDefaults 中。但是现在我想将相同的 NSMutableArray/NSUserDefaults
有没有办法访问特定的 PHAsset在多个设备上唯一的 iCloud 相册中? 我编写了一个简单的应用程序,其中列出了缩略图和 .localIdentifier s 来自 iCloud 共享相册,并且
我正在尝试将应用程序转移到另一个 Apple ID。当我这样做时,我收到一条错误消息,指出该应用程序无法传输,因为该应用程序启用了 iCloud。 由于这不是故意的,我尝试禁用 iCloud 并向应用
我的 iPhone 应用程序的文档文件夹与文件应用程序上的 iCloud 位置存在问题。我的应用程序的文档文件夹出现在文件应用程序的设备端,但没有出现在文件应用程序的 iCloud 位置。iCloud
我一直在为客户运行一个流程,该流程涉及通过在 ruby 脚本中进行 https GET 调用,从 me.com 获取他们公开可用的日历文件,然后将 .ics 文件中的数据转换为 html,然后将其
我在 App Store 中有一个简单的应用程序,它是 UITableView由用户填写一些 UITextField 填充s 在模态调用的 View 中。用户按下保存,所有内容都保存到 Core Da
我有点困惑。每次用户单击“备份”时,我都使用 iCloud Drive 存储内部数据的备份。这不像我想的那样工作,因为有时它只是不会在设备和单击恢复的用户之间同步得到他们的旧备份。 现在我已经阅读了有
我有一个 iOS 应用程序,其中一半用户希望使用 iCloud 在设备之间同步一些数据,而另一半则不需要。出于这个原因,我将核心数据(启用 iCloud)的 sqlite 文件放在应用程序文档目录中。
我正在为 friend 的企业构建一个 i0S 8 iPad 应用程序,以帮助他和他的员工在设备之间同步评估数据。换句话说,如果一名员工创建了评估,则运行该应用程序的所有其他员工都应该可以访问该评估。
我正在创建一个应用程序(目前仅适用于 iPhone),它需要一种自动备份数据的方法,并让用户能够从不同的设备访问他们的数据。数据可能会在一段时间后达到一致的大小,因为它还将包括照片等。 我目前正在考虑
我非常接近在我的应用程序中完成 iCloud 和核心数据的实现。这是一款仅限 iOS 7 的应用程序。 我在应用程序中为用户提供一个选项,以 UISwitch 的形式说出打开或关闭 iCloud。该应
我正在开发一个使用核心数据的应用程序,因为我认为我可以使用核心数据为 iCloud 提供的同步功能在 iPad 和 iPhone 之间同步数据,现在它已被弃用。 我遇到了 CloudKit,但它主要用
应用程序在 iCloud 中存储数据似乎有几种不同的方式(iCloud Drive 文档、带 iCloud 同步的核心数据、CloudKit 私有(private)数据库、键值对等),但我不确定是否仅
我是一名优秀的程序员,十分优秀!