Ios 身份验证后跨视图控制器持久化用户数据
我正在开发我的第一个iOS应用程序,它利用了我编写的web服务/数据API。用户可以在登录/经过身份验证后使用此API创建帐户和检索信息。所有用户都说:用户名,用户id,个人资料图片,传记等。。。我创建了一个NSObject用户,它是一个具有相应属性/属性的类。登录后,在每个viewcontroller中,我们都需要访问此用户数据,而我现在实现的解决方案是为每个viewcontroller提供一个属性用户,该属性用户需要我的用户对象。每次实例化视图控制器时,我都将用户类实例分配给viewcontroller的user属性,以便可以从viewcontroller中访问该实例化用户类的属性。我知道这不是一个最佳的解决方案,但因为我一直在努力学习iOS,所以这就是我现在使用的 我的问题是:在我的应用程序中,保存这些用户数据以便跨多个视图控制器使用的最佳方法是什么 其他说明: 我需要保存的数据量相对较少,类型为NSString、NSNumber和UIImage。正在为当前登录的用户以及其他用户实例化My user类,例如,在检索朋友的数据并查看其个人资料时。只有在用户已通过身份验证的情况下才能访问数据,因此我需要能够在会话过期后销毁数据存储。给你 我不确定您实际要存储多少数据,但是。。。有一个iOS包装器可以在名为NSUserDefaults的plist中本地存储少量数据。 它真的很容易使用 它使用KVC设置/获取数据 下面是一个简单的例子: 保存数据Ios 身份验证后跨视图控制器持久化用户数据,ios,objective-c,iphone,Ios,Objective C,Iphone,我正在开发我的第一个iOS应用程序,它利用了我编写的web服务/数据API。用户可以在登录/经过身份验证后使用此API创建帐户和检索信息。所有用户都说:用户名,用户id,个人资料图片,传记等。。。我创建了一个NSObject用户,它是一个具有相应属性/属性的类。登录后,在每个viewcontroller中,我们都需要访问此用户数据,而我现在实现的解决方案是为每个viewcontroller提供一个属性用户,该属性用户需要我的用户对象。每次实例化视图控制器时,我都将用户类实例分配给viewcont
[[NSUserDefaults standardUserDefaults] setString:myString forKey:@"username"];
[[NSUserDefaults standardUserDefaults] synchronize];
得到它
_userName = [[NSUserDefaults standardUserDefaults]
stringForKey:@"username"];
如果您需要用户在全球范围内可用,可以将其作为公共属性存储在应用程序代理上。比如: 在AppDelegate.h中
@interface AppDelegate UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) NSObject *user; // or User *user; if you have an actual user class
另一种方法是使用一个将用户保存在属性中的singleton类。例如:
@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的答案不同,后者会。好的是,如果你想要的话,你可以同时使用这两种想法。你是否在寻找一种存储用户名、用户id、个人资料图片、传记的方法。。。本地?谢谢肖恩。我接受了另一个答案,因为他先回答了,这个解决方案对我很有效。不过,我非常感谢你的洞察力。谢谢
@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