将用户个人资料存储在iOS应用中,以便始终可以访问

时间:2014-05-24 19:27:16

标签: ios datastore

我想创建一个用户,每次打开应用程序时应用程序都会从​​磁盘中提取该用户,并在每次关闭时写入。我希望可以从应用程序中的任何其他位置访问用户的数据,例如NSString名称以及其他一些变量。

只有一个用户,所以它是一种“全局”变量。此外,如果用户类包含指向NSMutableDictionary等数据结构或NSObject的其他实例的指针,是否需要采取任何预防措施?

我想学习实现这个的最佳方法,有什么建议吗?

5 个答案:

答案 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;