Gar*_*ret 3 core-data nsset nsmanagedobject icloud ios8
对于通过iCloud update发送的每个托管对象,此警告/错误将发送到控制台:
***错误:此进程调用了一个NSArray-taking方法,例如initWithArray:,并传入一个NSSet对象.现在正在解决这个问题,但很快就会让你感到悲痛.
我的托管对象是客户端,与评估有一对多的关系,如下所示.
class Client: NSManagedObject {
//other NSManaged vars are here
@NSManaged var assessment: NSOrderedSet
}
Run Code Online (Sandbox Code Playgroud)
从这个错误的时间(在无处不在的更新期间)以及这是我在项目中唯一使用NSSet对象的事实来判断,我可以假设在更新期间,当一个函数在期望NSArray时传递一个NSOrderedSet.
关闭iCloud可以消除错误.
我发现另外两个人有一个非常相似的问题: 使用iCloud启用Core Data NSArray-taking方法
但是,它们都没有为我的问题提供任何解决方 现在一切都很好,但"很快就会让你感到悲伤."
如果这里没有解决,我将把这个问题与苹果开发支持联系起来.
经过多次研究后,我想出了如何解决这个错误.(Apple Dev论坛没有帮助).
这是错误是由Swift 1.2升级引起的.他们鼓励您使用新的Set <>类而不是NSSet.错误是加强这种主张的模糊方式.
我的数据的排序最终由我的NSFetchedResultsController处理,所以我不需要订购存储的数据.所以我开始着手改变从NSOrderedSet到Set的一对多关系的数据类型.
所以我创建了一个新的数据模型,选择了我的关系并在数据模型检查器中取消选中"Ordered".然后在下次运行中迁移到新模型.(如下所示)
完成后,我将托管对象子类中的数据类型从NSOrderedSet更改为Set.(或设置).这会生成编译器错误,这些错误很容易在我的代码中修复.
新的Set类可以轻松转换为数组: Array(mySet)
要将对象插入到集合中,可以使用简单的插入方法. foo.mySet.insert(objectToInsert).
旁注:将我的关系转换为Set也修复了我的表视图和NSFetchedResultsController的一些奇怪的排序问题.
然后我运行程序,生成数据,卸载程序.再次运行该程序,观看光荣的iCloud数据填充,没有恼人的错误.
繁荣.我希望这能节省10个小时的动荡(我尝试了很多不同的事情......)我花了很多时间来解决这个问题.
| 归档时间: |
|
| 查看次数: |
424 次 |
| 最近记录: |