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

jww*_*jww 27 iphone settings ipad ios

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

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

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

Gre*_*reg 71

NSUserDefaults 可以用于你所要求的.

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

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

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

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

不要被'用户偏好'部分推迟.你可以用它来保存任何你想要的(只要它是或可以转换为NSObject它实现<NSCoding>,这基本上意味着NSString,NSDictionary,NSArray,NSNumber,UITextField,int,float,bool,等).

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

  • NightLeopard - 我本来希望能给你答案,但我不能.我能做的最好的就是竖起大拇指. (2认同)

Muj*_*key 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"];
}
Run Code Online (Sandbox Code Playgroud)