对于登录-注销-登录的情况,所有事情都需要在注销或下次登录时自行重置,我喜欢创建一个通知,例如“NewUserReset”。所有需要将自身重置为原始状态的东西都会侦听通知并运行一个方法来执行所需的任何类型的重置。选项卡栏会将按钮标题更改为注销、临时数据结构 nil/zero/release 本身等。
它很好地将注销与所有必须完成的事情解耦,因此您无需尝试从接收注销点击的控制器操作视图控制器和数据存储以及视图外观。
发送通知很容易。当用户点击“注销”按钮时,您将发送如下通知:
[[NSNotificationCenter defaultCenter] postNotificationName:@"JMUserLogout"
object:nil];
您不必将其称为 JMUserLogout,您只需要一个您会识别的字符串和一些东西(我使用了您的姓名缩写)来帮助确保您不会意外发送与通知名称相同的通知你没有意识到正在倾听。
当该通知发出时,任何已向 defaultCenter 注册以侦听@“JMUserLogout”的对象都将执行您选择的任何操作。以下是对象的注册方式(这应该位于 ViewWillLoad 或对象的初始化方法等某个地方):
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(resetForNewUser:)
name:@"JMUserLogout"
object:nil];
那里的选择器,resetForNewUser:,只是通知发出时您想要运行的方法的名称。该方法如下所示:
- (void)resetForNewUser:(NSNotification *)notif {
// DO SOMETHING HERE
}
在显示 // DO SOMETHING HERE 的地方,您将添加特定于您的应用程序的代码。例如,您可以将选项卡栏添加为 JMUserLogout 通知的观察者。在其resetForNewUser: 方法中,您可以将注销按钮的名称更改为Login。
在保存来自先前用户的旧数据的 ViewController 或 View 或数据存储中,resetForNewUser 方法将删除所有这些数据并将其设置回新用户之前应有的方式。例如,如果前一个用户将数据输入到 UITextField 中,您将删除该文本,yourTextFieldName.text = @"";
最后,在释放对象之前,将对象作为观察者删除也很重要。在注册接收通知的每个对象的 Dealloc 方法中,添加以下内容:
[[NSNotificationCenter defaultCenter] removeObserver:self];
希望这是有道理的。这NSNotificationCenter 的 Apple 文档 http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html解释了更多内容,并提供了几个使用通知的示例应用程序。