在SDK中使用CoreData时,选择了使用MagicalRecord,按流程操作后,在使用MR_findAll等方法时,程序崩溃,错误信息如下
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'executeFetchRequest:error: A fetch request must have an entity.'
经检查,发现是使用SDK的TARGETS->Build Phases->Copy Bundle Resources中没有加入model.xcdatamodeld,加入后,程序不再崩溃。
由于SDK要提供给第三方,需要将model.xcdatamodeld加入bundle中后,供MagicalRecord使用。
采用如下方法
1.找到bundle
NSString *myBundlePath = [[NSBundle mainBundle] pathForResource:@"myBundlePath" ofType:@"bundle"];
NSBundle *myBundle = [NSBundle bundleWithPath:myBundlePath];
2.合并项目和SDK中的所有模型创建一个NSManagedObject模型。这简化了保存,我们可以用一个单独的persistent store来保存一个单独的managed object model。
NSArray * bundles = [NSArray arrayWithObjects:[NSBundle mainBundle],myBundle,nil];
NSManagedObjectModel * models = [NSManagedObjectModel mergedModelFromBundles:bundles];
[MagicalRecord setShouldAutoCreateManagedObjectModel:NO];
[NSManagedObjectModel MR_setDefaultManagedObjectModel:models];
3.初始化MagicalRecord
[MagicalRecord setupCoreDataStackWithStoreNamed:@"MySDKData.sqlite"];
经测试,demo正常运行。
网友评论