1

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

当应用程序第一次启动时managedObjectStore,所有其他 CoreData 功能都appDidFinishLaunchingWithOptionsappDelegate. 但是,当我注销应用程序并尝试重新登录时,会抛出异常,因为我managedObjectContext的值为 nil。它是 nil,因为我选择不将它从注销 viewController 传递到登录 viewController。我想清除旧的并为新用户创建新的。

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

有人可以告诉我如何做这样的事情吗?我对此很陌生,所以如果这是不合适或不必要的,我愿意学习正确/适当的方法!

4

1 回答 1

0

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

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

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

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

///when we logout
-(IBaction) didLogout {
     <cleanup>
    _sharedInstance = nil;
}

这是一个单例与延迟加载相结合的例子。它将按需创建,并且只创建一次,直到下一次设置为 nil。

于 2013-08-02T01:03:51.810 回答