我在Xcode中收到此消息:
The provided ubiquity name is already in use.,
NSURL=file://localhost/var/mobile/Applications/6C748748-9689-4F40-B8D7-
CDE8CA280FF8/Documents/SharedCoreDataStores/138F8194-DCC7-4D66-859B-
B2C35BDF2984/iCloudStore.sqlite
如何找到此文件的位置(iCloudStore.sqlite)?我试过〜/ Library / Containers和〜/ Library / Mobile Documents。
由于
答案 0 :(得分:6)
你可以在
找到它NSURL *DocumentsURL = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask].lastObject;
NSURL *tempURL = DocumentsURL;
tempURL = [tempURL URLByAppendingPathComponent:@"sharedCoreDataStores"];
tempURL = [tempURL URLByAppendingPathComponent:@"138F8194-DCC7-4D66-859B-B2C35BDF2984"];
tempURL = [tempURL URLByAppendingPathComponent:@"iCloudStore.sqlite"];
NSURL *iCloudStoreURL = tempURL;
iCloudStoreURL就是你想要的。 您可以使用iCloud演示代码从核心数据创建此商店。正确?
您已在[coordinator addPersistentStore]
个函数中传递此商店网址。
将iCloud与Core Data一起使用时,您应该注意两个位置和一个名称:
iCloud存储真实文件,它将所有数据存储在本地文件夹中。每个设备都有一个商店文件。它将自动从iCloud传输数据。
添加iCloud商店时,您将此商店网址传递给[coordinator addPersistentStore]
功能。
然后商店文件将找到该URL。
它应该在本地文件夹中,如documentsDirectory
中的子目录for example:
[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask].lastObject URLByAppendingComponent:@"iCloudStore"];
或其他一些目录。我的选择是
[[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask].lastObject URLByAppendingComponent:@"iCloudStore"];
此URL位于iCloud容器(或名为“ubiquity容器”)的代码中。 它仅用于记录核心数据内容的更改。
在云中思考它。 [NSFileManager URLForUbiquityContainer:nil]
是该云的位置。
iCloud CoreData Content URL
用于所有iCloud核心数据数据库传输此普遍容器上的日志。 (不同应用程序上的不同核心数据数据库可能位于相同的普遍容器中,并将日志存储在此contentURL
中。)
在设置添加iCloud Store的选项时传递此URL:
NSDictionary *cloudOptions =
@{ NSMigratePersistentStoresAutomaticallyOption:@(YES),
NSInferMappingModelAutomaticallyOption :@(YES),
NSPersistentStoreUbiquitousContentNameKey :self.iCloudCoreDataContentName,
NSPersistentStoreUbiquitousContentURLKey :self.iCloudCoreDataContentURL}
此网址应该是iCloud容器的子目录,例如[[NSFileManager URLForUbiquityContainer:nil] URLByAppendingComponent:@"CoreDataLogs"]
。
此属性在选项中是可选的。如果省略,iCloud CoreData内容URL将为[NSFileManager URLForUbiquityContainer:nil]
。
指定核心数据数据库的唯一名称。 每个iCloud商店都需要它。不同的iCloud商店应该有不同的名称。
在设置添加iCloud Store的选项时传递此名称:
NSDictionary *cloudOptions =
@{ NSMigratePersistentStoresAutomaticallyOption:@(YES),
NSInferMappingModelAutomaticallyOption :@(YES),
NSPersistentStoreUbiquitousContentNameKey :self.iCloudCoreDataContentName,
NSPersistentStoreUbiquitousContentURLKey :self.iCloudCoreDataContentURL}