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];
}