gpt4 book ai didi

iphone - 学习存档

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:41:11 26 4
gpt4 key购买 nike

我正在尝试保存和加载一个简单应用程序的设置。但是我对 obj-c 还是陌生的。我相信保存部分在工作,但不是加载部分。当我更改设置时,按返回键并重新进入设置 View ,设置未加载。

我认为这与使用保存的数据创建 SettingsViewController 的方式有关,但我无法理解它。

下面是来自 SettingsViewController 的有趣代码,下面是来自 MainWindowViewController 的有趣代码

设置 View Controller :

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

最佳答案

使用 NSKeyedArchiver 来保存简单应用程序的设置有点矫枉过正。

Foundation 框架提供了 NSUserDefaults 类,使用起来更方便。
这是适用于 iOS 或 OS X 的方法。

它将使用您的设置在正确的位置写入一个 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 可以管理很多数据类型。整数、 bool 值、 float ,还有数组 (NSArray)、字典 (NSDictionary)、数据 (NSData) 等。

另请注意,您可以通过以下方式从现有的 plist 文件(即在您的应用程序资源中)加载默认设置:

[ [ NSUserDefaults standardUserDefaults ] registerDefaults: [ NSDictionary dictionaryWithContentsOfFile: @"path/to/plist" ] ];

关于iphone - 学习存档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18244536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com