NSUserDefaults与设置

来源:互联网 发布:蒙自电视台网络直播 编辑:程序博客网 时间:2024/05/16 10:28

1.我们可以通过NSUserDefaults类来保存一些设置。例如:

- (IBAction)changeMapType:(id)sender{    [[NSUserDefaults standardUserDefaults]                     setInteger:[sender selectedSegmentIndex]                        forKey:WhereamiMapTypePrefKey];        switch([sender selectedSegmentIndex])    {        case 0:        {            [worldView setMapType:MKMapTypeStandard];        } break;        case 1:        {            [worldView setMapType:MKMapTypeSatellite];        } break;        case 2:        {            [worldView setMapType:MKMapTypeHybrid];        } break;    }}

保存地图中所要显示的selectedSegmentIndex,NSUserDefaults会将数据保存在Library/Preferences目录下,文件名为应用的程序包标识(bundle identifier)加后缀.plist。

同样的,可以使用该类来获取之前保存的内容。

代码如下:

- (BOOL)application:(UIApplication *)application     didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{    NSInteger mapTypeValue = [[NSUserDefaults standardUserDefaults]                                 integerForKey:WhereamiMapTypePrefKey];        // Update the UI    [mapTypeControl setSelectedSegmentIndex:mapTypeValue];        // Update the map    [self changeMapType:mapTypeControl];        // Create location manager object    locationManager = [[CLLocationManager alloc] init];    [locationManager setDelegate:self];        [locationManager setDistanceFilter:kCLDistanceFilterNone];    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];        [worldView setShowsUserLocation:YES];        [self.window makeKeyAndVisible];    return YES;}

2.NSuserDefaults的注册域与应用域

应用中有些临时的默认值存放在NSuserDefaults的注册域中,而用户设置的偏好设置则存放在另一个被叫做应用域的域中。默认情况下,应用域是空的,当用户第一次修改某个设置时,相应的值会通过指定的键加入应用域。当通过NSUserDefaults对象查找某个偏好设置的值时,该对象会先在应用域中查找,如果能找到则返回相应的值,如果没找到,则到注册域中找并返回。

设置注册域的方法:先创建一个NSDictionary对象,其中的键值对就是需要设置的默认偏好设置,然后向NSUserDefaults对象发送registerDefaults:消息,并将NSDictionary作为参数传入。

3.新创建的类在收到任何其他消息前,会先收到initialize消息,所以在注册域中设置偏好设置就在该方法中设置。代码如下:

+ (void)initialize{    NSDictionary *defaults = [NSDictionary                             dictionaryWithObject:[NSNumber numberWithInt:1]                                          forKey:WhereamiMapTypePrefKey];    [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];}


0 0
原创粉丝点击