【发布时间】:2012-06-21 06:40:02
【问题描述】:
当用户登录我的应用程序时,我会在后台线程中从服务器下载一些数据。 我有一个单例,将其 managedObjectContext 设置为主要 managedobjectcontext 的子项。
-(NSManagedObjectContext*) context{
if(!_context){
NSManagedObjectContext *child = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[child setParentContext:[MyAppDelegate delegate].managedObjectContext];
_context = child;
}
return _context;
}
当用户注销时,我删除了锁定主 managedobjectcontext 的 PersistenceStoreCoordinator sqllite 文件
-(void)onLogout{
NSError *error = nil;
if ([_persistentStoreCoordinator persistentStores] == nil)
return;
[self.managedObjectContext reset];
[self.managedObjectContext lock];
NSPersistentStore *store = [[self.persistentStoreCoordinator persistentStores] lastObject];
if (![self.persistentStoreCoordinator removePersistentStore:store error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
// Delete file
if ([[NSFileManager defaultManager] fileExistsAtPath:store.URL.path]) {
if (![[NSFileManager defaultManager] removeItemAtPath:store.URL.path error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
_persistentStoreCoordinator = nil;
_persistentStoreCoordinator = [self persistentStoreCoordinator];
[self.managedObjectContext unlock];
self.agendaLoader = nil;
_agendaLoader = self.agendaLoader;
}
如果我在同一个模拟器会话中注销/登录(不停止应用程序),单例中的保存方法会崩溃并出现以下错误:
This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation.'
但如果我注销/停止应用程序/重新启动应用程序/登录,它可以正常工作。
我尝试在注销时重置子 managedobjectcontext 没有任何结果..
是否有任何最佳实践来重置所有 managedobjectcontexts、删除 storecoordinator 文件并“重新启动”所有核心数据堆栈?
感谢您的帮助。
【问题讨论】:
-
你期望做什么 _persistentStoreCoordinator = [self persistentStoreCoordinator]; ?顺便说一句,为什么在这里使用 [self persistentStoreCoordinator] 而不是你在其他地方使用的 self.persistentStoreCoordinator?
标签: ios core-data nsmanagedobjectcontext