我正在开发一个(我的第一个)iOS应用程序,它利用我编写的Web服务/数据API。用户可以在登录/验证后使用此API创建帐户并检索信息。所有用户都说a:用户名,用户ID,个人资料图片,传记等...我已经创建了一个NSObject"用户"这是一个具有相应属性/属性的类。登录后,在每个viewcontroller中我们需要访问这个用户数据,我现在实现的解决方案是为每个viewcontroller提供一个属性" user"期望我的用户对象。每次我实例化一个视图控制器时,我都会将用户类实例分配给viewcontroller的user属性,这样我就可以从viewcontroller中访问该实例化用户类的属性。我知道这不是一个最佳的解决方案,但是因为我一直在努力学习iOS,所以这就是我现在所使用的。
我的问题是:在我的应用程序中跨多个视图控制器使用此持久保存此用户数据的最佳方法是什么?
其他说明: 我需要持久化的数据量相对较少,并且类型为NSString,NSNumber和UIImage。我的用户类正在为当前登录的用户实例化,也为其他用户实例化,例如,当为朋友检索数据时#34;然后查看他们的个人资料。只有在用户通过身份验证后,才能访问用户的数据,因此我需要能够在会话过期后销毁数据存储。
答案 0 :(得分:0)
你走了。
我不确定您确实要存储多少数据,但是......有一个iOS包装器可以在名为NSUserDefaults的plist中本地存储少量数据。 它真的很容易使用。 Check out the documentation
它使用KVC来设置/获取数据。
这是一个简单的例子:
保存数据
[[NSUserDefaults standardUserDefaults] setString:myString forKey:@"username"];
[[NSUserDefaults standardUserDefaults] synchronize];
获得它
_userName = [[NSUserDefaults standardUserDefaults]
stringForKey:@"username"];
答案 1 :(得分:0)
如果您需要用户全局可用,您可以将其作为公共属性存储在您的应用代理中。类似的东西:
在AppDelegate.h中
@interface AppDelegate UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) NSObject *user; // or User *user; if you have an actual user class
然后在你的视图控制器中
#import "AppDelegate.h" // at the top
[UIApplication sharedApplication].delegate.user; // where you need access to the user
您可以使用的另一个路径是将您的用户保存在属性中的单例类。例如:
@interface UserManager : NSObject
-(instancetype) sharedHandler;
@property (strong, nonatomic) NSObject *user;
@end
@implementation UserManager
+(instancetype) sharedHandler
{
static instancetype sharedInstance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
@end
很多人认为单身人士和全球财产是不好的做法,但我认为他们有自己的用途;他们只是被滥用而且声名狼借。我应该补充的另一件事是,这不会在应用程序启动之间保持信息(如果应用程序被用户退出或被系统终止);不像@ NewEngland的回答那样。好的是,如果那就是你想要的,你实际上可以同时使用这两个想法。