我正在尝试将我的应用中的某些设置保存到plist文件中,然后在应用启动时加载它们。我在NSArray中保存了4个数字,称为数组。加载工作正常,因为如果我更改文件,应用程序将以文件更改的方式启动。
此代码可以正常工作:
- (void)LoadSettings {
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:kSaveFileLocation];
NSArray *array = [[NSArray alloc] initWithContentsOfFile:finalPath];
clockFaceImageSlider.value = [[array objectAtIndex:0] integerValue];
HourTypeSwitch.on = [[array objectAtIndex:1] integerValue];
touchRotationSwitch.on = [[array objectAtIndex:2] integerValue];
accelerometerRotationSwitch.on = [[array objectAtIndex:3] integerValue];
}
此代码适用于保存行:
- (void)SaveSettings {
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:kSaveFileLocation];
NSArray *array = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:clockFaceImageSlider.value], [NSNumber numberWithInt:HourTypeSwitch.on], [NSNumber numberWithInt:touchRotationSwitch.on], [NSNumber numberWithInt:accelerometerRotationSwitch.on], nil];
if (![array writeToFile:finalPath atomically:YES]) {
NSLog(@"error");
}
//The log does print error
}
有人知道如何将它保存到plist中吗?
〜感谢
答案 0 :(得分:4)
不要写数组描述NSString,而只需编写数组:
[array writeToFile:finalPath atomically:YES];
或者如果你想要字符串,你应该使用编码类型
NSError *error;
[[array description] writeToFile:finalPath atomically:YES encoding:NSUTF8StringEncodingerror:&error];
但这不会写一个plist。
答案 1 :(得分:2)
不要使用description
的{{1}}(NSString
}并将其写入文件,而只需使用NSArray
本身的writeToFile:atomically
,如
NSArray
[array writeToFile:finalPath atomically:YES];
的{{1}}被弃用的原因是它没有正确地考虑字符编码。谁告诉你使用writeToFile:atomically:
?那个人/书应该受到惩罚......
也就是说,如果您只想保存几个条目,那么使用NSString
会更容易,请参阅here。那么你所要做的就是
description
并且框架可以完成从准备幕后的plist路径到将其保存到磁盘的所有功能。