在iOS上保存(私人)应用程序设置?

时间:2011-07-08 11:05:26

标签: iphone ios ipad settings

我知道NSUserDefaults用于保存/恢复 用户 偏好设置。 应用 的等效类是什么?例如,应用程序可能具有“最后运行”字段;或者它可能有一个字段,用于在应用程序级别使用的设备的唯一标识。

我的目的是将应用程序的设置(不是用户的设置)保留在设置应用程序之外,而不是在iTunes,Time Machine,{whatever}中备份这些设置。

我为Java和C#带来了很多噪音,但对iOS / iPhone / iPad来说并不多。

3 个答案:

答案 0 :(得分:71)

NSUserDefaults可用于您所要求的内容。

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"shownPrompt"]) {
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"shownPrompt"];
    // Show your prompt or whatever
}

这是一个有效的代码片段。如果键为false,则将其设置为true并显示提示。下次运行此代码时,该键已经为true,因此不会显示提示。

NSUserDefaults特定于当前设备上的当前应用,并且类似于NSMutableDictionary,因为它是一个键值系统,区别在于不是实例化您自己的,而是适用于整个应用的通用共享实例,在应用退出时不会被删除。

NSUserDefaults非常适合保存诸如是否显示某些内容,上次运行日期等内容。请阅读此处的文档:https://developer.apple.com/documentation/foundation/userdefaults

不要被'用户偏好'部分推迟。您可以使用它来保存您想要的任何内容(只要它可以或可以转换为实现NSObject的{​​{1}},这基本上意味着<NSCoding>NSString,{ {1}},NSDictionaryNSArrayNSNumberUITextFieldint等。)

只是为了澄清,在float中放入的内容,在任何情况下,都会自动显示在“设置”应用中。它将完全保密并隐藏起来。要在“设置”中显示某些内容,您需要向应用添加“设置”分发包,并为要在“设置”应用中显示的每个值手动添加键。

答案 1 :(得分:11)

如果你可以通过NSUserDefaults存储价值,那么也可以存储应用程序首选项。

或在项目中添加settings.plist并阅读(之后您不会更改的内容)

你可以使用像。,

+ (NSDictionary*)getBundlePlist:(NSString *)plistName
{
    NSString *errorDesc = nil;
    NSPropertyListFormat format;
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:plistName ofType:@"plist"];
    NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath];
    NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization
                                          propertyListFromData:plistXML
                                          mutabilityOption:NSPropertyListMutableContainersAndLeaves           
                                          format:&format errorDescription:&errorDesc];
    return temp;
}

+ (id) getPropValue:(NSString *)PropertyName
{   // I am supposing you had add your app preferences on settings.plist.
    return [[Property getBundlePlist:@"settings"] objectForKey:PropertyName];
    //here Property is my class name, then you can use value by 
    //NSString *value = [Property getPropValue:@"setting1"];
}

答案 2 :(得分:0)

很难说出你在问什么。听起来NSUserDefaults就是您所寻找的,但您声称自己已经意识到这一点。那么你的问题是什么?