iCloud同步失败,出现“CoreData:Ubiquity:Invalid选项:NSPersistentStoreUbiquitousContentNameKey的值不应包含句点”

时间:2013-10-06 13:40:40

标签: ios core-data icloud magicalrecord

  

CoreData:Ubiquity:无效选项:NSPersistentStoreUbiquitousContentNameKey的值不应包含句点:com.YashwantChauhan.Outis

     

-PFUbiquitySwitchboardEntryMetadata setUseLocalStorage :: CoreData:Ubiquity:mobile~20BF44C9-C39F-48DC-A8A1-B45FC82C7E20:com.YashwantChauhan.Outis

我遇到与iCloud同步的问题。上面这两个错误都被抛到了我的身上。我不知道是什么问题,我设置了Entitlements文件,并将Ubiquity容器设置为com.YashwantChauhan.Outis

我使用MagicalRecord的方法启动CoreData堆栈:

[MagicalRecord setupCoreDataStackWithiCloudContainer:@"N6TU2CB323.com.YashwantChauhan.Outis" localStoreNamed:@"Model.sqlite"];

但是,由于MagicalRecord只是简化了CoreData方法,所以不应该这么做。

非常感谢。

确定更新:

  

- [NSFileManager URLForUbiquityContainerIdentifier:]:获取普遍容器URL时出错:错误   Domain = LibrarianErrorDomain Code = 11“操作不能   完成。 (LibrarianErrorDomain错误11 - 请求的容器   客户端不允许使用标识符   com.apple.developer.ubiquity-container-identifiers entitlement。)“   UserInfo = 0x15e0d8a0 {NSDescription =请求的容器标识符   客户不允许   com.apple.developer.ubiquity-container-identifiers entitlement。}

这是我收到的最新错误消息,我意识到这与问题的初始错误不同,但事实证明旧消息是某种奇怪的错误。我通过删除Ubiquity Container标识符中的句点来尝试@Rauru Ferro的解决方案。我知道这不会起作用,因为标识符的要求是包含句点,但是当我将句点放回时,它会在上面显示错误消息。这比使用句点更有意义。我们都知道 do

我还发现了这个方便的代码片段,可以通过获取它来实际检查我的Ubiquity容器标识符。有用的代码片段可以快速检查您是否有任何问题。

NSString *containerId = @"com.YashwantChauhan.Outis";
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *iCloudURL = [fileManager URLForUbiquityContainerIdentifier:containerId];
NSLog(@"%@", [iCloudURL absoluteString]);

另一个更新:从它的外观来看,这个愚蠢的NSPersistentStoreUbiquitousContentNameKey should not contain periods是一团糟。如果NSPersistentStoreUbiquitousContentNameKey被创建为某种文件夹(Tutorial),那么要求是名称前面没有.,例如.com.YashwantChauhan.Outis但不是案件。我开始疯了! Entitlements文件没有问题,并且在MagicalRecord中没有提取iCloud容器ID。我开始认为这是在Xcode 5中设置iCloud的内部问题,但我当然不知道。有了这个说法,我可能会对一些微不足道的东西或其他会让其他人头痛的事情失去理智。

任何人都可以发布他们的Entitlements文件,这样我就可以验证实际工作版本的样子。当然是编辑的。谢谢!

4 个答案:

答案 0 :(得分:5)

https://forums.pragprog.com/forums/252/topics/12315

引用回复:

最近改变了(小牛队)。幸运的是,由于您刚刚添加iCloud,因此影响很小。

您需要更改以下代码行:

[options setValue:[[NSBundle mainBundle] bundleIdentifier] forKey:NSPersistentStoreUbiquitousContentNameKey]; 别的。那是什么东西?我会推荐一些描述你的应用程序的东西。我最近一直在使用类名结构。因此,我可能会将其更改为您的应用程序的名称,或者只是“DataStorage”。

该名称对您的应用程序而言是唯一的,因此只要您了解该名称,实际值并不重要。

所以我改变了下面的代码......

        options = [NSDictionary dictionaryWithObjectsAndKeys:
                   [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,     // Key to automatically attempt to migrate versioned stores
               [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,           // Key to attempt to create the mapping model automatically
               @"TrafficCamNZ_DataStore", NSPersistentStoreUbiquitousContentNameKey,                // Option to specify that a persistent store has a given name in ubiquity.
               cloudURL, NSPersistentStoreUbiquitousContentURLKey,                              // Option to specify the log path to use for ubiquitous content logs.
               nil];

请参阅说明TrafficCamNZ_DataStore的行 它之前有TrafficCamNZ.DataStore

  • 大卫

答案 1 :(得分:2)

我正在使用共享容器,只是出现了相同的错误警告。我可以通过替换所有出现的不同云标识符字符串来修复它,例如:

  • "$(TeamIdentifierPrefix)com.mydomain.myapp"
  • "com.mydomain.myapp"
  • "ABCDEF0123.com.mydomain.myapp"

只有这一个显式的云容器字符串:

  • "ABCDEF0123.com.mydomain.myapp"

我想在某些时候,Xcode必须更新权利并重新插入"$(TeamIdentifierPrefix)",这由于共享容器而错误。另外,我忘记了代码中的标识,就像你似乎有:

NSString *containerId = @"com.YashwantChauhan.Outis";

应该是这样的:

NSString *containerId = @"ABCDEF01234.com.YashwantChauhan.Outis";

答案 2 :(得分:1)

我有同样的问题,我不确定问题是什么或为什么会存在。 从我正在阅读的内容中,我们应该能够使用containerId中的点。

然而,对我来说,它开始工作,用tildes代替containerId中的点:

即:

NSString *containerId = @"N6TU2CB323~com~YashwantChauhan~Outis";

而不是:

NSString *containerId = @"N6TU2CB323.com.YashwantChauhan.Outis";

答案 3 :(得分:0)

尝试使用comYashwantChauhanOutis,没有两点。