Dom*_*ams 95 core-data objective-c ios
我在Core Data上遇到了我的第一个破解,当我在我的设备上运行代码时出现以下错误,但它在模拟器上工作正常.
*由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'无法使用nil模型创建NSPersistentStoreCoordinator'
我的一些方法可能导致问题:
- (NSManagedObjectContext *)managedObjectContext
{
if (__managedObjectContext != nil)
{
return __managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil)
{
__managedObjectContext = [[NSManagedObjectContext alloc] init];
[__managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return __managedObjectContext;
}
/**
Returns the managed object model for the application.
If the model doesn't already exist, it is created from the application's model.
*/
- (NSManagedObjectModel *)managedObjectModel
{
if (__managedObjectModel != nil)
{
return __managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"RugbyOnTv" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return __managedObjectModel;
}
/**
Returns the persistent store coordinator for the application.
If the coordinator doesn't already exist, it is created and the application's store added to it.
*/
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator != nil)
{
return __persistentStoreCoordinator;
}
NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"RugbyOnTV.sqlite"];
NSURL *storeUrl = [NSURL fileURLWithPath:storePath];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return __persistentStoreCoordinator;
}
- (NSString *)applicationDocumentsDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
return basePath;
}
Run Code Online (Sandbox Code Playgroud)
编辑
我从Apple的CoreDataBooks复制并粘贴了managedObjectContext方法(下面),它现在可以工作了......虽然不知道为什么
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
return managedObjectModel;
}
Run Code Online (Sandbox Code Playgroud)
小智 157
我有与原始帖子完全相同的错误消息.几个小时我一直在摔跤.这是AppDelegate.m中的这一行.
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"[same with name of xcdatamodeld]" withExtension:@"momd"];
Run Code Online (Sandbox Code Playgroud)
对于任何人在那里搜索此错误消息并找到此线程....首先尝试这个.
你必须确保它所在的位置[与xcdatamodeld的名称相同] ....它是!!! 由于某种原因,我的项目名称在那里,而不是数据模型名称.
改变它,它立即工作.....
感谢Rock&Muller的贡献.......你救了我几天!
暖气.
D33*_*6h7 54
首先验证:
NSLog(@"%@", [self managedObjectModel]);
Run Code Online (Sandbox Code Playgroud)
如果你得到一个零值可能问题就在这里
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"RugbyOnTv" withExtension:@"momd"];
Run Code Online (Sandbox Code Playgroud)
所以,尝试用@"妈妈"改变@"momd"
xst*_*ter 20
我遇到过Xcode 4.3.2和iOS 5的奇怪问题.
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"NAME_OF_THE_MODEL" withExtension:@"momd"];
Run Code Online (Sandbox Code Playgroud)
返回有效的URL但是
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
Run Code Online (Sandbox Code Playgroud)
返回null NSManagedObjectModel.但在检查文档后,似乎NSManagedObjectModel需要一个文件,其中NAME_OF_THE_MODEL.momd是一个包含NAME_OF_THE_MODEL.mom文件的目录.将URL更改为
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"NAME_OF_THE_MODEL" withExtension:@"mom" subdirectory:@"NAME_OF_THE_MODEL.momd"];
Run Code Online (Sandbox Code Playgroud)
然后工作.虽然Xcode生成的代码不能与自身一起工作,但似乎很奇怪......
JDx*_*JDx 19
我有这个问题,将"妈妈"改为"妈妈"没有做任何事.要修复它,我必须右键单击xcdatamodelId文件>显示包内容,然后删除隐藏的.xcurrentversion文件.
PS:这个问题才在我更改了数据模型文件的名称后才开始发生.
Dav*_*ood 13
此错误的另一个原因是,有时Xcode不包含构建中的数据模型.
检查目标的Build Phases,并确保*.xcdatamodeld文件包含在Compile Sources部分中.
可能发生的是,Apple的源代码中的xcdatamodeld文件已变为xcdatamodel(没有d)文件,因此它们不被认为是相同的.
解决此问题的最快方法是在项目导航器中选择xcdatamodel文件并进入菜单栏
Editor->Add Model Version...
并添加模型的新版本.对新版本进行所有更改.
这适用于Xcode 5
我和@Dominic Williams有同样的问题
尝试更改下面的momd文件名(managedObjectModel
默认情况下可以在方法中找到),与[file name].xcdatamodeld
您创建的文件相同:
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"[same with name of xcdatamodeld]" withExtension:@"momd"];
Run Code Online (Sandbox Code Playgroud)
我通过添加db文件来解决它Copy Bundle Resources
.
转到项目的根目录>>选择目标>>构建阶段>>复制捆绑资源.确保您的xcdatamodeld文件已添加到此处.
所有发布的解决方案都不适合我.所以,希望这篇文章可以帮助那些人.我的应用程序只在发布版本btw崩溃.学过的知识.始终测试发布版本!
顺便说一句,我发现这个SO帖子最有帮助/sf/answers/469618621/.
小智 5
我有同样的问题.解决方案是2个答案的组合:
1)我必须将"subdirectory"参数添加到URLForResource调用中
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"DATAMODEL_NAME" withExtension:@"mom" subdirectory:@"DATAMODEL_NAME.momd"];
Run Code Online (Sandbox Code Playgroud)
2)由于我不知道的原因,在编译项目时不包括数据模型.我不得不手动将其添加到"构建阶段/编译资源"中.
只有上述解决方案之一,我的应用程序无法正常工作.
归档时间: |
|
查看次数: |
53957 次 |
最近记录: |