我正在构建一个简单的 Twitter 克隆应用程序。基本上,您使用您的用户名登录并查看您朋友的所有帖子。我正在为用户和帖子实体使用核心数据。
到目前为止,我已经设法实现身份验证,但是一旦用户成功登录,我不知道在哪里存储用户对象。我在想可能将其保存为 AppDelegate 的属性,以便可以从任何视图控制器访问它,但是想知道这是否是正确的方法。
我正在构建一个简单的 Twitter 克隆应用程序。基本上,您使用您的用户名登录并查看您朋友的所有帖子。我正在为用户和帖子实体使用核心数据。
到目前为止,我已经设法实现身份验证,但是一旦用户成功登录,我不知道在哪里存储用户对象。我在想可能将其保存为 AppDelegate 的属性,以便可以从任何视图控制器访问它,但是想知道这是否是正确的方法。
最好将用户对象单独传递,或者与更大的 Context 对象中的其他对象一起传递,然后根据需要将其分配给每个 ViewController。
例如上下文类
@interface MyContextClass
@property (nonatomic) MyUserClass *user;
@property nonatomic) Settings *settings;
@end
然后,在任何 UIViewController 上,都有这个 Context 对象的属性。
@interface MyViewController
@property (nonatomic) MyContextClass *context;
#end
这是一个依赖注入的例子,它允许你用不同的用户/上下文/本地等测试不同的视图控制器,而不必绑定到一个单例。
我假设您可能必须从应用程序中的多个位置访问用户详细信息。您应该将用户信息存储在模型类中,而不是使用模型行为重载应用程序委托。一些开发人员(包括我自己)使用单例模式来创建一个模型类(或者在更复杂的应用程序中,一个模型类和一个在幕后与多个其他模型类交互的公共接口),这些信息可以在其中存储、检索、如果需要,可以选择持久化。
您可以为此使用 NSUserDefault。
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:username forKey:@"username"];
[userDefaults setObject:password forKey:@"password"];
并将其作为:
NSString username = [userDefaults objectsForKey:@"username"];
NSString password = [userDefaults objectsForKey:@"password"];