Core Data浅谈系列之四 : 数据模型的版本变迁

网友投稿 268 2022-09-06

Core Data浅谈系列之四 : 数据模型的版本变迁

继​​上一篇文章​​末尾提到的,一支队伍可以添加多名球员,不过一名球员只能属于一支队伍中,这分别对应着Core Data中一对多和一对一的属性关系:

如上两图,是在Team实体里面添加了一个players关系,指向Player实体,可以一支球队关联多名球员,并且最多只允许关联15名球员。

同样地,也为Player实体添加team关系,指向Team实体:

一名球员只能关联一支球队,并且让这个关系成双向的,即一个Player对象属于某支球队时,该球队的players属性就自动关联该Player对象。

做完以上对表关系的修改,再次运行程序。

Oops,运行不起来——

[plain] ​​view plain​​​ ​​​copy​​ 1. 2013-01-16 16:56:18.667 cdNBA[18591:c07] Error : The operation couldn’t be completed. (Cocoa error 134100.)2. 2013-01-16 16:56:18.670 cdNBA[18591:c07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation.'

这是由于我们刚才做了一番修改,persistentStoreCoordinator无法适应新的数据模型。

当开启一个新版本时,如果数据模型发生变动,我们需要创建一个新版本使用的数据模型:

并将其设置为当前版本使用的数据模型:

除此之外,还需要在persistentStoreCoordinator添加存储文件时设置一个选项:

[cpp] ​​view plain​​​ ​​​copy​​ 1. - (NSPersistentStoreCoordinator *)persistentStoreCoordinator2. {3. if (nil != _persistentStoreCoordinator) {4. return_persistentStoreCoordinator;5. }6. 7. NSString *storeType = NSSQLiteStoreType;8. "cdNBA.sqlite";9. 10. NSError *error = NULL;11. NSURL *storeURL = [NSURLfileURLWithPath:[[selfapplicationDocumentsDirectory] stringByAppendingPathComponent:storeName]];12. 13. NSDictionary *options = [NSDictionarydictionaryWithObjectsAndKeys:14. [NSNumbernumberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,15. [NSNumbernumberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];16. 17. _persistentStoreCoordinator = [[NSPersistentStoreCoordinatoralloc] initWithManagedObjectModel:self.managedObjectModel];18. if (![_persistentStoreCoordinator addPersistentStoreWithType:storeType configuration:nilURL:storeURL options:options error:&error]) {19. "Error : %@\n", [error localizedDescription]);20. "Failed to create store %@ with NSSQLiteStoreType", [storeURL path]);21. }22. 23. return _persistentStoreCoordinator;24. }

做完上面的工作,再跑一遍Demo。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Core Data浅谈系列之二 : 简单的CURD
下一篇:IOS 拖动视图
相关文章

 发表评论

暂时没有评论,来抢沙发吧~