核心数据应用程序是iphone设备中的崩溃
您好我正在设备中测试我的核心数据应用程序,但它在iphone中崩溃并在模拟器中正常工作.这是我的代码..
- (NSManagedObjectContext *)managedObjectContext { if (managedObjectContext != nil) { return managedObjectContext; } NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; if (coordinator != nil) { managedObjectContext = [[NSManagedObjectContext alloc] init]; [managedObjectContext setPersistentStoreCoordinator:coordinator]; } return managedObjectContext; } - (NSManagedObjectModel *)managedObjectModel { if (managedObjectModel != nil) { return managedObjectModel; } NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TouristGuide" withExtension:@"momd"]; managedObjectModel= [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; NSLog(@"%@",modelURL); return managedObjectModel; } - (NSPersistentStoreCoordinator *)persistentStoreCoordinator { if (persistentStoreCoordinator != nil) { return persistentStoreCoordinator; } NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"TouristGuide.sqlite"]; NSFileManager *fileManager = [NSFileManager defaultManager]; // If the expected store doesn't exist,copy the default store. if (![fileManager fileExistsAtPath:storePath]) { NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"TouristGuide" ofType:@"sqlite"]; if (defaultStorePath) { [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL]; } } 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; if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) { // Update to handle the error appropriately. NSLog(@"Unresolved error %@,%@",error,[error userInfo]); exit(-1); // Fail } return persistentStoreCoordinator; } 设备日志显示异常: persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]]; 例外情况是无法使用nil模型创建nspersistancecordinator,其次是无法找到实体“城市”. 我怎么解决这个问题? 崩溃日志 0x352d1de0 -[NSPersistentStoreCoordinator initWithManagedObjectModel:] + 252 10 TouristGuide 0x0000358e -[TouristGuideAppDelegate persistentStoreCoordinator] (TouristGuideAppDelegate.m:176) 11 TouristGuide 0x0000310e -[TouristGuideAppDelegate managedObjectContext] (TouristGuideAppDelegate.m:124) 12 TouristGuide 0x000041f6 -[CityViewController viewDidLoad] (CityViewController.m:43) 解决方法
按住选项键,进入产品菜单(Xcode 4)并执行“清理构建文件夹”…然后释放选项键,然后执行“清理”…
现在做产品菜单>分析并确保一切都是洁净的. 最后转到项目查看器的左侧面板,然后单击代表整个项目的图标.在主面板中显示的窗口中,在“目标”下,单击您的应用.现在单击“Build Phases”并展开“Copy Bundle Resources”.确保您的TouristGuide.xcdatamodeld文件存在.接下来,展开“使用库链接二进制文件”并确保“CoreData.framework”在那里(如果您将Core Data添加到一个现在没有作为Core Data项目开始的项目,那么很可能,它不在那里).接下来,展开“编译源代码”,当然,仔细检查所有模型类都在那里(你知道,NSManagedObject自定义子类). 说到这些模型类……现在点击您的TouristGuide.xcdatamodeld并单击“默认”配置.确保在“类”列中显示“NSManagedObject”的任何类都没有自定义类,如果它们列出了自定义类,请确保您具有与之对应的等效命名的.h和.m文件. 10比1它与您的模型文件本身有关.有一次我改变了我的模型文件的完整路径(它应该是/Users/You/Documents/Developer/MyApp/MyModel.xcdatamodeld/MyModel.xcdatamodel).一旦我更改了它,我就无法弄清楚如何更改它,因为MyModel.xcdatamodeld是一个“包”文件,而不是文件夹.当然,在查找器中,您可以执行“显示包内容…”,但是XCode用于选择文件位置的对话框拒绝导航到包内容!所以我无法重新选择位于.xcdatamodeld文件中的.xcdatamodel文件!我不得不从头开始重新创建我的整个模型文件,这是一个巨大的痛苦.也许有办法做到这一点,但我无法弄明白. 还有,最后两个技巧. 最后一招,为了以防万一,请在项目备份中尝试这个,但是当我遇到困难时它对我有用:从这里更改代码: NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TouristGuide" withExtension:@"momd"]; 对此: NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"TouristGuide" withExtension:@"mom"]; ……将“妈妈”改为“妈妈”. 然后从设备或模拟器中删除应用程序,“清理构建文件夹”,“清理”,然后重建并重新运行项目.它可能会给你错误,也可能没有.之后,然后将其更改回“momd”并重做所有这些步骤.更改此项可能会使XCode删除比执行“清理构建文件夹”并重新安装应用程序时更多的内容.这样,当你切换回来时,它会制作一个新的“妈妈”文件. 最后一招: 它也永远不会对你的标题中的#import造成伤害,只是为了好运. :d 希望这可以帮助.如果有人在一开始就告诉我这些东西,那将节省我很多时间. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |