我想创建一个用户,每次打开应用程序时应用程序都会从磁盘中提取该用户,并在每次关闭时写入。我希望可以从应用程序中的任何其他位置访问用户的数据,例如NSString
名称以及其他一些变量。
只有一个用户,所以它是一种“全局”变量。此外,如果用户类包含指向NSMutableDictionary
等数据结构或NSObject
的其他实例的指针,是否需要采取任何预防措施?
我想学习实现这个的最佳方法,有什么建议吗?
答案 0 :(得分:1)
1)创建一个代表您的用户的类
2)让该类实现NSCoding
协议
3)根据需要使用NSFileManager
创建或打开文件
4)使用该文件恢复/存储用户类。 (使用NSCoding
协议很容易)
5)使模型拥有的用户类暴露用户类中的数据,或者使用户类成为单例(第一个更好)。
如果您使用NSCoding
答案 1 :(得分:1)
您可以创建由NSObject扩展的UserObject。使用Singleton Pattern
,这样每个类中总是有相同的对象。
然后,您可以使用特定的NSUserDefaults
将每个变量保存在key
内。
如果要将整个对象保存在NSUserDefaults
中,则需要在界面中包含NSCoding
@interfaces User : NSObject <NSCoding>
并使用方法initWithCode:
和encodeWithCoder
:
- (id)initWithCoder:(NSCoder *)aDecoder{
self = [super init];
if( self ){
strName = [aDecoder decodeObjectForKey:@"name"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:strName forKey:@"name"];
}
用于取消/存档以这种方式执行:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:userObject];
UserObject *user = [NSKeyedUnarchiver unarchiveObjectWithData:data];
如果您想了解更多信息can read all about it here。
答案 2 :(得分:0)
NSUserDefaults是你的朋友。它符合您的要求,可以从应用程序的任何其他位置访问。
答案 3 :(得分:0)
如果要存储私人用户数据,请使用钥匙串。 在大多数情况下,马丁的答案是最好的方式。
答案 4 :(得分:0)
NSUserDefaults是一个很好的选择。您可以从应用程序的每个点访问它,随时保存和提取数据并存储您可能需要的大部分内容。
保存:
NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];
[userDef setObject:userDictionary forKey:@"userData"];
[userDef synchronize];
提取:
NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];
NSDictionary *userDictionary = [userDef objectForKey:@"userData"];
您可以将数据保存在AppDelegate的
上- (void)applicationWillTerminate:(UIApplication *)application;
提取:
- (void)applicationWillEnterForeground:(UIApplication *)application;