Ios 注销后需要重新启动应用程序以创建新的managedObjectContext

Ios 注销后需要重新启动应用程序以创建新的managedObjectContext,ios,core-data,restkit,appdelegate,Ios,Core Data,Restkit,Appdelegate,我有一个iOS应用程序,它使用CoreData保存通过RestKit从服务器检索到的数据。我创建了一个注销按钮,当按下该按钮时,将清除所有NSUserDefaults,并将用户发送回登录屏幕 当应用程序第一次启动时,managedObjectStore和所有其他CoreData功能将在appDelegate的appDidFinishLaunchingWithOptions方法中生成。但是,当我注销应用程序并尝试重新登录时,会引发异常,因为我的managedObjectContext为零。它是ni

我有一个iOS应用程序,它使用CoreData保存通过RestKit从服务器检索到的数据。我创建了一个注销按钮,当按下该按钮时,将清除所有
NSUserDefaults
,并将用户发送回登录屏幕

当应用程序第一次启动时,
managedObjectStore
和所有其他CoreData功能将在
appDelegate
appDidFinishLaunchingWithOptions
方法中生成。但是,当我注销应用程序并尝试重新登录时,会引发异常,因为我的
managedObjectContext
为零。它是nil,因为我选择不将它从注销viewController传递到登录viewController。我想清除旧的,并为新用户创建新的

当我点击注销并移动到登录屏幕时,我想创建一个新的
managedObjectStore/Context
。这样的事情可能吗?基本上,我需要重新启动应用程序时,用户按下注销


有人能告诉我怎么做吗?我在这方面还很新,所以如果这是不合适或不必要的,我愿意学习正确/适当的方法

就人机界面指南而言,重新启动应用程序是非常糟糕的做法。不惜一切代价避免这种情况

尝试在didLogin方法中创建数据实例,如果您愿意,登录视图控制器可以从委托中调用它

否则,您可以在注销时将managedObjectStore设置为nil,并为其提供访问器方法,如下所示:

    NSManagedObjectContext *_sharedInstance;
-(NSManagedObjectContext*) getManagedOBjectContext {
    if (_sharedInstance==nil) {
        _sharedInstance = <do create>;
     }
    return _sharedInstance;
}

///when we logout
-(IBaction) didLogout {
     <cleanup>
    _sharedInstance = nil;
}
NSManagedObjectContext*\u共享状态;
-(NSManagedObjectContext*)getManagedOBjectContext{
如果(_sharedInstance==nil){
_sharedInstance=;
}
返回-共享状态;
}
///当我们注销时
-(IBaction)退出{
_sharedInstance=零;
}

这是一个单例和延迟加载相结合的例子。它将根据需要创建,并且只有一次,直到下一次设置为零。

Wow感谢您的快速响应。我读过一些关于重新开始糟糕的练习的帖子,所以我会采纳你的建议,避免这样做。比起在didLogin方法中创建数据,我更喜欢accessor方法。不过我需要一点澄清。我在注销时将
存储设置为nil,但在什么时候需要调用
getManagedObjectContext
。您可以调用[appDelegate getManagedOBjectContext];