Core Data结构修改后,在AppStore中更新升级crash的问题.

本文解决了iOS5上使用XMPP框架时程序崩溃的问题。通过修改CoreData的持久化存储协调器代理实现方法,并添加选项以自动迁移数据模型更改,解决了因持久化存储协调器无法执行保存操作而导致的崩溃。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

在苹果的错误收集中有这么一个问题:

使用的xmpp框架,在调整为适应ios5的版本后出现一个导致程序crash问题。但是原来的xmpp代码没有改变,那么问题在哪呢?

报错如下:

  1. BUG监听报告:
  2. 手机型号:iPhoneOS,版本: 4.3
  3. 程序名称:xxx,版本:1.3
  4. 用户:xxx
  5. 2011-11-1316:17:31.506 [11747:307]***Terminatingappduetouncaughtexception'NSInternalInconsistencyException',reason:'ThisNSPersistentStoreCoordinatorhasnopersistentstores.Itcannotperformasaveoperation.'
  6. ***Callstackatfirstthrow:
  7. (
  8. 0CoreFoundation0x344aaed3__exceptionPreprocess+114
  9. 1libobjc.A.dylib0x33975811objc_exception_throw+24
  10. 2CoreData0x338f29c1-[NSPersistentStoreCoordinatorexecuteRequest:withContext:error:]+196
  11. 3CoreData0x3389253d-[NSManagedObjectContextsave:]+700
  12. 4 0x00045145-[XMPPCapabilitiesCoreDataStoragesetCapabilities:forHash:algorithm:]+444
  13. 5 0x00042121-[XMPPCapabilitiesxmppStream:willSendPresence:]+232
  14. 6 0x0003ca57-[XMPPStreamsendElement:withTag:]+342
  15. 7 0x0003c8f5-[XMPPStreamsendElement:]+28
  16. 8 0x0004592f-[iPhoneXMPPgoOnline]+54

解决办法:
在stackoverflow找到解决办法:
http://stackoverflow.com/questions/1091228/i-keep-on-getting-save-operation-failure-after-any-change-on-my-xcode-data-mod

需要修改coredata的persistentstorecoordinator的代理实现方法,添加options,使得当coredata数据模型发生变化时,自动更该合并变化。

代码如下:

  1. -(NSPersistentStoreCoordinator*)persistentStoreCoordinator{
  2. if(persistentStoreCoordinator!=nil){
  3. returnpersistentStoreCoordinator;
  4. }
  5. NSURL*storeUrl=[NSURLfileURLWithPath:[[selfapplicationDocumentsDirectory]stringByAppendingPathComponent:@"database.sqlite"]];
  6. NSError*error=nil;
  7. NSDictionary*options=[NSDictionarydictionaryWithObjectsAndKeys:
  8. [NSNumbernumberWithBool:YES],NSMigratePersistentStoresAutomaticallyOption,
  9. [NSNumbernumberWithBool:YES],NSInferMappingModelAutomaticallyOption,nil];
  10. persistentStoreCoordinator=[[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:[selfmanagedObjectModel]];
  11. if(![persistentStoreCoordinatoraddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:storeUrloptions:optionserror:&error]){
  12. //Handleerror
  13. }
  14. returnpersistentStoreCoordinator;
  15. }


问题描述:

在苹果的错误收集中有这么一个问题:

使用的xmpp框架,在调整为适应ios5的版本后出现一个导致程序crash问题。但是原来的xmpp代码没有改变,那么问题在哪呢?

报错如下:

  1. BUG监听报告:
  2. 手机型号:iPhoneOS,版本: 4.3
  3. 程序名称:xxx,版本:1.3
  4. 用户:xxx
  5. 2011-11-1316:17:31.506 [11747:307]***Terminatingappduetouncaughtexception'NSInternalInconsistencyException',reason:'ThisNSPersistentStoreCoordinatorhasnopersistentstores.Itcannotperformasaveoperation.'
  6. ***Callstackatfirstthrow:
  7. (
  8. 0CoreFoundation0x344aaed3__exceptionPreprocess+114
  9. 1libobjc.A.dylib0x33975811objc_exception_throw+24
  10. 2CoreData0x338f29c1-[NSPersistentStoreCoordinatorexecuteRequest:withContext:error:]+196
  11. 3CoreData0x3389253d-[NSManagedObjectContextsave:]+700
  12. 4 0x00045145-[XMPPCapabilitiesCoreDataStoragesetCapabilities:forHash:algorithm:]+444
  13. 5 0x00042121-[XMPPCapabilitiesxmppStream:willSendPresence:]+232
  14. 6 0x0003ca57-[XMPPStreamsendElement:withTag:]+342
  15. 7 0x0003c8f5-[XMPPStreamsendElement:]+28
  16. 8 0x0004592f-[iPhoneXMPPgoOnline]+54

解决办法:
在stackoverflow找到解决办法:
http://stackoverflow.com/questions/1091228/i-keep-on-getting-save-operation-failure-after-any-change-on-my-xcode-data-mod

需要修改coredata的persistentstorecoordinator的代理实现方法,添加options,使得当coredata数据模型发生变化时,自动更该合并变化。

代码如下:

  1. -(NSPersistentStoreCoordinator*)persistentStoreCoordinator{
  2. if(persistentStoreCoordinator!=nil){
  3. returnpersistentStoreCoordinator;
  4. }
  5. NSURL*storeUrl=[NSURLfileURLWithPath:[[selfapplicationDocumentsDirectory]stringByAppendingPathComponent:@"database.sqlite"]];
  6. NSError*error=nil;
  7. NSDictionary*options=[NSDictionarydictionaryWithObjectsAndKeys:
  8. [NSNumbernumberWithBool:YES],NSMigratePersistentStoresAutomaticallyOption,
  9. [NSNumbernumberWithBool:YES],NSInferMappingModelAutomaticallyOption,nil];
  10. persistentStoreCoordinator=[[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:[selfmanagedObjectModel]];
  11. if(![persistentStoreCoordinatoraddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:storeUrloptions:optionserror:&error]){
  12. //Handleerror
  13. }
  14. returnpersistentStoreCoordinator;
  15. }

问题描述:

在苹果的错误收集中有这么一个问题:

使用的xmpp框架,在调整为适应ios5的版本后出现一个导致程序crash问题。但是原来的xmpp代码没有改变,那么问题在哪呢?

报错如下:

  1. BUG监听报告:
  2. 手机型号:iPhoneOS,版本: 4.3
  3. 程序名称:xxx,版本:1.3
  4. 用户:xxx
  5. 2011-11-1316:17:31.506 [11747:307]***Terminatingappduetouncaughtexception'NSInternalInconsistencyException',reason:'ThisNSPersistentStoreCoordinatorhasnopersistentstores.Itcannotperformasaveoperation.'
  6. ***Callstackatfirstthrow:
  7. (
  8. 0CoreFoundation0x344aaed3__exceptionPreprocess+114
  9. 1libobjc.A.dylib0x33975811objc_exception_throw+24
  10. 2CoreData0x338f29c1-[NSPersistentStoreCoordinatorexecuteRequest:withContext:error:]+196
  11. 3CoreData0x3389253d-[NSManagedObjectContextsave:]+700
  12. 4 0x00045145-[XMPPCapabilitiesCoreDataStoragesetCapabilities:forHash:algorithm:]+444
  13. 5 0x00042121-[XMPPCapabilitiesxmppStream:willSendPresence:]+232
  14. 6 0x0003ca57-[XMPPStreamsendElement:withTag:]+342
  15. 7 0x0003c8f5-[XMPPStreamsendElement:]+28
  16. 8 0x0004592f-[iPhoneXMPPgoOnline]+54

解决办法:
在stackoverflow找到解决办法:
http://stackoverflow.com/questions/1091228/i-keep-on-getting-save-operation-failure-after-any-change-on-my-xcode-data-mod

需要修改coredata的persistentstorecoordinator的代理实现方法,添加options,使得当coredata数据模型发生变化时,自动更该合并变化。

代码如下:

  1. -(NSPersistentStoreCoordinator*)persistentStoreCoordinator{
  2. if(persistentStoreCoordinator!=nil){
  3. returnpersistentStoreCoordinator;
  4. }
  5. NSURL*storeUrl=[NSURLfileURLWithPath:[[selfapplicationDocumentsDirectory]stringByAppendingPathComponent:@"database.sqlite"]];
  6. NSError*error=nil;
  7. NSDictionary*options=[NSDictionarydictionaryWithObjectsAndKeys:
  8. [NSNumbernumberWithBool:YES],NSMigratePersistentStoresAutomaticallyOption,
  9. [NSNumbernumberWithBool:YES],NSInferMappingModelAutomaticallyOption,nil];
  10. persistentStoreCoordinator=[[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:[selfmanagedObjectModel]];
  11. if(![persistentStoreCoordinatoraddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:storeUrloptions:optionserror:&error]){
  12. //Handleerror
  13. }
  14. returnpersistentStoreCoordinator;
  15. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值