我试图保存和加载一个简单应用程序的设置。不过,我对obj-c还是很陌生的。我确实认为,节省部分是有效的,但不是装载部分。当我更改设置时,按后按并重新进入设置视图,设置将不会加载。
我认为这与如何使用保存的数据创建SettingsViewController有关,但我无法用它来包装我的头脑。
下面是来自SettingsViewController的有趣代码,下面是来自MainWindowViewController的有趣代码
SettingsViewController:
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if(self)
{
NSString * path = [self settingsArchivePath];
self = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
shakeSwitch.on = shakeForTag;
[warningDistanceFld setText:[NSString stringWithFormat:@"%i",warningDistance]];
}
return self;
}
-(id)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithNibName:@"SettingsViewController" bundle:nil];
if(self)
{
[self setShakeForTag:[aDecoder decodeBoolForKey:@"shakeForTag"]];
[self setWarningDistance:[aDecoder decodeIntForKey:@"warningDistance"]];
[self setMapType:[aDecoder decodeIntegerForKey:@"mapType"]];
}
return self;
}
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeInt:warningDistance forKey:@"warningDistance"];
[aCoder encodeBool:shakeForTag forKey:@"shakeForTag"];
[aCoder encodeInteger:mapType forKey:@"mapType"];
}
-(NSString *)settingsArchivePath
{
NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * documentDirectory = [documentDirectories objectAtIndex:0];
return [documentDirectory stringByAppendingPathComponent:@"settings.archive"];
}
-(IBAction)back:(id)sender
{
if([mapChanger selectedSegmentIndex] == 0){
mapType = MKMapTypeSatellite;
}else if([mapChanger selectedSegmentIndex] ==1){
mapType = MKMapTypeHybrid;
}else{
mapType = MKMapTypeStandard;
}
NSString *warning = [warningDistanceFld text];
warningDistance = [warning intValue];
shakeForTag =shakeSwitch.on;
[self saveChanges];
[self dismissViewControllerAnimated:YES completion:nil];
}
-(BOOL)saveChanges
{
NSString *path = [self settingsArchivePath];
NSLog(@"saved");
return [NSKeyedArchiver archiveRootObject:self toFile:path];
}在MainWindowViewController中初始化settingsViewController的代码:
svc = [[SettingsViewController alloc]initWithNibName:@"SettingsViewController" bundle:[NSBundle mainBundle]];
svc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:svc animated:YES completion:nil];发布于 2013-08-15 01:34:26
使用NSKeyedArchiver保存简单应用程序的设置有点过分。
基金会框架提供了NSUserDefaults类,使用起来要容易得多。
对于iOS或OS来说,这就是该走的路。
它将用您的设置在正确的位置写入一个plist文件。
写东西基本上是:
[ [ NSUserDefaults standardUserDefaults ] setBool: YES forKey: @"SettingsKey" ];
[ [ NSUserDefaults standardUserDefaults ] setInteger: 42 forKey: @"SettingsKey" ];
[ [ NSUserDefaults standardUserDefaults ] synchronise ];最后一行确保将数据写入磁盘。它不是强制性的,因为它是定期自动调用的,但通常显式调用它更安全。
获取数据基本上是:
[ [ NSUserDefaults standardUserDefaults ] boolForKey: @"SettingsKey" ];
[ [ NSUserDefaults standardUserDefaults ] integerForKey: @"SettingsKey" ];NSUserDefault可以管理很多数据类型.整数,布尔,浮点,还有数组(NSArray),字典(NSDictionary),数据(NSData)等等.
还请注意,您可以通过以下方式从现有的plist文件(即应用程序资源中)加载默认设置:
[ [ NSUserDefaults standardUserDefaults ] registerDefaults: [ NSDictionary dictionaryWithContentsOfFile: @"path/to/plist" ] ];https://stackoverflow.com/questions/18244536
复制相似问题