9

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

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

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

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

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

但这并不重要,因为 MagicalRecord 只是简化了 CoreData 方法。

非常感谢帮助。

好的更新:

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

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

我还发现了这个方便的代码片段,它实际上可以通过获取它来检查我的 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 的内部问题,但我当然不知道。话虽如此,我可能只是因为一些琐碎的事情或实际上会让其他人头疼的事情而失去理智。

任何人都可以发布他们的权利文件,以便我可以验证实际工作版本的外观。当然是删减了。谢谢!

4

4 回答 4

5

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

引用回复:

这最近发生了变化(小牛队)。对您来说幸运的是,由于您刚刚添加了 iCloud,因此影响很小。

您需要更改以下代码行:

[选项 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 的行

  • 大卫
于 2014-02-03T10:01:59.540 回答
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";
于 2015-06-19T15:00:39.643 回答
1

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

但是,对我来说,它通过用波浪号替换 containerId 中的点开始工作:

IE:

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

代替:

NSString *containerId = @"N6TU2CB323.com.YashwantChauhan.Outis";
于 2013-10-23T14:06:14.333 回答
0

尝试使用comYashwantChauhanOutis,没有这两点。

于 2013-10-06T19:04:13.060 回答