呸!试图重置核心数据。每秒工作一次?
Posted
技术标签:
【中文标题】呸!试图重置核心数据。每秒工作一次?【英文标题】:Gah! Trying to reset Core Data. Works every second time? 【发布时间】:2012-03-26 15:59:46 【问题描述】:好的,所以我的应用程序委托创建了所有核心数据内容,然后我发送到我的第一个视图控制器。
我的第一个视图控制器是一个 NSURLConnectionDelegate...在 connectionDidFinishLoading 方法中,我想擦除 persistentStore 并重新创建它...然后从 XML 文件解析/重新填充它。
这是我的 connectionDidFinishLoading 代码:
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
//I believe I should nil out the context...
managedObjectContext = nil;
//Erase the persistent store from coordinator and also file manager.
NSError *error = nil;
NSPersistentStore *store = [self.persistentStoreCoordinator.persistentStores lastObject];
NSURL *storeURL = store.URL;
[persistentStoreCoordinator removePersistentStore:store error:&error];
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error];
//Make new persistent store and add to the coordinator
if (![self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
else
//Store is readied, now recreate the managedObjectContext
id appDelegate = (id)[[UIApplication sharedApplication] delegate];
managedObjectContext = [appDelegate managedObjectContext];
//Call the parser!
[self parseXML];
我知道这里出了点问题……只是想不通。它在我构建/运行时每秒钟工作一次。当我尝试在解析器方法中保存 managedObjectContext 时出现错误
谁能提供我如何解决此问题的示例代码?
提前致谢,
【问题讨论】:
您正在为协调员和文件管理器传递&error
- 每次调用后您会返回什么错误 - NSLog("%@", error);
;)
没有得到任何错误...错误出现在 [parseXML] 方法的后面。但我知道它与这个粘贴的代码有关......如果我取出所有持久存储删除位并且只是 [parseXML] 它可以工作
我得到的错误是关于“if (![managedObjectContext save:&error])”,是的……我每第二次运行应用程序时才会收到错误。错误是“EXC_BAD_ACCESS”
你是如何创建/保留你的 managedObjectContext 的?
managedObjectContext 是使用标准核心数据方法从应用程序委托创建/传递的。但是是的,managedObjectContext 似乎确实在应用程序的第二次构建/运行时被释放或某些东西......该属性被声明为“@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;”
【参考方案1】:
我能够得到这个工作
(在我的视图控制器中)
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
id appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate resetCoreData];
self.managedObjectContext = [appDelegate managedObjectContext];
[self parseXML];
(在我的应用委托中)
- (void)resetCoreData;
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"deleteme.sqlite"];
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager removeItemAtURL:storeURL error:NULL];
NSError* error = nil;
if([fileManager fileExistsAtPath:[NSString stringWithContentsOfURL:storeURL encoding:NSASCIIStringEncoding error:&error]])
[fileManager removeItemAtURL:storeURL error:nil];
self.managedObjectContext = nil;
self.persistentStoreCoordinator = nil;
【讨论】:
以上是关于呸!试图重置核心数据。每秒工作一次?的主要内容,如果未能解决你的问题,请参考以下文章