1

我在 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。

谢谢

4

1 回答 1

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]您已在函数中传递了此商店 URL 。


在将 iCloud 与 Core Data 一起使用时,您应该注意两个位置和一个名称:

1.商店网址

iCloud存储真实文件,它将所有数据存储在本地文件夹中。每个设备都有一个存储文件。它将自动从 iCloud 传输数据。

添加 iCloud 商店时,您将此商店 url 传递给[coordinator addPersistentStore]功能。

然后存储文件将位于该 URL。

它应该在本地文件夹中,例如documentsDirectory 中的子目录

for example: 
[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask].lastObject URLByAppendingComponent:@"iCloudStore"];

或其他目录。我的选择是

[[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask].lastObject URLByAppendingComponent:@"iCloudStore"];

2. iCloud CoreData 内容 URL

此 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}

此 URL 应该是 iCloud 容器的子目录,例如[[NSFileManager URLForUbiquityContainer:nil] URLByAppendingComponent:@"CoreDataLogs"].

此属性在选项中是可选的。如果您省略它,iCloud CoreData 内容 URL 将为[NSFileManager URLForUbiquityContainer:nil].

3. iCloud CoreData 内容名称

为核心数据数据库指定唯一名称。每个 iCloud 商店都需要它。不同的 iCloud 商店应该有不同的名称。

当您设置添加 iCloud Store 的选项时,您会传递此名称:

 NSDictionary *cloudOptions =
 @{  NSMigratePersistentStoresAutomaticallyOption:@(YES),
 NSInferMappingModelAutomaticallyOption      :@(YES),
 NSPersistentStoreUbiquitousContentNameKey   :self.iCloudCoreDataContentName,
 NSPersistentStoreUbiquitousContentURLKey    :self.iCloudCoreDataContentURL}
于 2012-12-27T15:44:07.437 回答