问题描述:
在苹果的错误收集中有这么一个问题:
使用的xmpp框架,在调整为适应ios5的版本后出现一个导致程序crash问题。但是原来的xmpp代码没有改变,那么问题在哪呢?
报错如下:
- BUG监听报告:
- 手机型号:iPhoneOS,版本: 4.3
- 程序名称:xxx,版本:1.3
- 用户:xxx
- 2011-11-1316:17:31.506 [11747:307]***Terminatingappduetouncaughtexception'NSInternalInconsistencyException',reason:'ThisNSPersistentStoreCoordinatorhasnopersistentstores.Itcannotperformasaveoperation.'
- ***Callstackatfirstthrow:
- (
- 0CoreFoundation0x344aaed3__exceptionPreprocess+114
- 1libobjc.A.dylib0x33975811objc_exception_throw+24
- 2CoreData0x338f29c1-[NSPersistentStoreCoordinatorexecuteRequest:withContext:error:]+196
- 3CoreData0x3389253d-[NSManagedObjectContextsave:]+700
- 4 0x00045145-[XMPPCapabilitiesCoreDataStoragesetCapabilities:forHash:algorithm:]+444
- 5 0x00042121-[XMPPCapabilitiesxmppStream:willSendPresence:]+232
- 6 0x0003ca57-[XMPPStreamsendElement:withTag:]+342
- 7 0x0003c8f5-[XMPPStreamsendElement:]+28
- 8 0x0004592f-[iPhoneXMPPgoOnline]+54
在stackoverflow找到解决办法:
需要修改coredata的persistentstorecoordinator的代理实现方法,添加options,使得当coredata数据模型发生变化时,自动更该合并变化。
代码如下:
- -(NSPersistentStoreCoordinator*)persistentStoreCoordinator{
- if(persistentStoreCoordinator!=nil){
- returnpersistentStoreCoordinator;
- }
- NSURL*storeUrl=[NSURLfileURLWithPath:[[selfapplicationDocumentsDirectory]stringByAppendingPathComponent:@"database.sqlite"]];
- NSError*error=nil;
- NSDictionary*options=[NSDictionarydictionaryWithObjectsAndKeys:
- [NSNumbernumberWithBool:YES],NSMigratePersistentStoresAutomaticallyOption,
- [NSNumbernumberWithBool:YES],NSInferMappingModelAutomaticallyOption,nil];
- persistentStoreCoordinator=[[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:[selfmanagedObjectModel]];
- if(![persistentStoreCoordinatoraddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:storeUrloptions:optionserror:&error]){
- //Handleerror
- }
- returnpersistentStoreCoordinator;
- }
问题描述:
在苹果的错误收集中有这么一个问题:
使用的xmpp框架,在调整为适应ios5的版本后出现一个导致程序crash问题。但是原来的xmpp代码没有改变,那么问题在哪呢?
报错如下:
- BUG监听报告:
- 手机型号:iPhoneOS,版本: 4.3
- 程序名称:xxx,版本:1.3
- 用户:xxx
- 2011-11-1316:17:31.506 [11747:307]***Terminatingappduetouncaughtexception'NSInternalInconsistencyException',reason:'ThisNSPersistentStoreCoordinatorhasnopersistentstores.Itcannotperformasaveoperation.'
- ***Callstackatfirstthrow:
- (
- 0CoreFoundation0x344aaed3__exceptionPreprocess+114
- 1libobjc.A.dylib0x33975811objc_exception_throw+24
- 2CoreData0x338f29c1-[NSPersistentStoreCoordinatorexecuteRequest:withContext:error:]+196
- 3CoreData0x3389253d-[NSManagedObjectContextsave:]+700
- 4 0x00045145-[XMPPCapabilitiesCoreDataStoragesetCapabilities:forHash:algorithm:]+444
- 5 0x00042121-[XMPPCapabilitiesxmppStream:willSendPresence:]+232
- 6 0x0003ca57-[XMPPStreamsendElement:withTag:]+342
- 7 0x0003c8f5-[XMPPStreamsendElement:]+28
- 8 0x0004592f-[iPhoneXMPPgoOnline]+54
在stackoverflow找到解决办法:
需要修改coredata的persistentstorecoordinator的代理实现方法,添加options,使得当coredata数据模型发生变化时,自动更该合并变化。
代码如下:
- -(NSPersistentStoreCoordinator*)persistentStoreCoordinator{
- if(persistentStoreCoordinator!=nil){
- returnpersistentStoreCoordinator;
- }
- NSURL*storeUrl=[NSURLfileURLWithPath:[[selfapplicationDocumentsDirectory]stringByAppendingPathComponent:@"database.sqlite"]];
- NSError*error=nil;
- NSDictionary*options=[NSDictionarydictionaryWithObjectsAndKeys:
- [NSNumbernumberWithBool:YES],NSMigratePersistentStoresAutomaticallyOption,
- [NSNumbernumberWithBool:YES],NSInferMappingModelAutomaticallyOption,nil];
- persistentStoreCoordinator=[[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:[selfmanagedObjectModel]];
- if(![persistentStoreCoordinatoraddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:storeUrloptions:optionserror:&error]){
- //Handleerror
- }
- returnpersistentStoreCoordinator;
- }
问题描述:
在苹果的错误收集中有这么一个问题:
使用的xmpp框架,在调整为适应ios5的版本后出现一个导致程序crash问题。但是原来的xmpp代码没有改变,那么问题在哪呢?
报错如下:
- BUG监听报告:
- 手机型号:iPhoneOS,版本: 4.3
- 程序名称:xxx,版本:1.3
- 用户:xxx
- 2011-11-1316:17:31.506 [11747:307]***Terminatingappduetouncaughtexception'NSInternalInconsistencyException',reason:'ThisNSPersistentStoreCoordinatorhasnopersistentstores.Itcannotperformasaveoperation.'
- ***Callstackatfirstthrow:
- (
- 0CoreFoundation0x344aaed3__exceptionPreprocess+114
- 1libobjc.A.dylib0x33975811objc_exception_throw+24
- 2CoreData0x338f29c1-[NSPersistentStoreCoordinatorexecuteRequest:withContext:error:]+196
- 3CoreData0x3389253d-[NSManagedObjectContextsave:]+700
- 4 0x00045145-[XMPPCapabilitiesCoreDataStoragesetCapabilities:forHash:algorithm:]+444
- 5 0x00042121-[XMPPCapabilitiesxmppStream:willSendPresence:]+232
- 6 0x0003ca57-[XMPPStreamsendElement:withTag:]+342
- 7 0x0003c8f5-[XMPPStreamsendElement:]+28
- 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数据模型发生变化时,自动更该合并变化。
代码如下:
- -(NSPersistentStoreCoordinator*)persistentStoreCoordinator{
- if(persistentStoreCoordinator!=nil){
- returnpersistentStoreCoordinator;
- }
- NSURL*storeUrl=[NSURLfileURLWithPath:[[selfapplicationDocumentsDirectory]stringByAppendingPathComponent:@"database.sqlite"]];
- NSError*error=nil;
- NSDictionary*options=[NSDictionarydictionaryWithObjectsAndKeys:
- [NSNumbernumberWithBool:YES],NSMigratePersistentStoresAutomaticallyOption,
- [NSNumbernumberWithBool:YES],NSInferMappingModelAutomaticallyOption,nil];
- persistentStoreCoordinator=[[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:[selfmanagedObjectModel]];
- if(![persistentStoreCoordinatoraddPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:storeUrloptions:optionserror:&error]){
- //Handleerror
- }
- returnpersistentStoreCoordinator;
- }