我想将bool属性保存到我的文件中,我认为这样做是野蛮的。我必须检查我的属性,然后将字符串添加到NSMutableArray。我可以检查属性名称,状态/值然后保存到文件吗?或者也许我应该使用XML文件?但仍然为了有效使用我应该得到属性名称和州/值。
你可以给我一些建议吗?-(void) saveSettings
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"settings" ofType:@""];
if (music)
{
[correctSettingArray removeObjectAtIndex:0];
[correctSettingArray addObject:@"music = 1"];
}
else
{
[correctSettingArray removeObjectAtIndex:0];
[correctSettingArray addObject:@"music = 0"];
}
if (sfx)
{
[correctSettingArray removeObjectAtIndex:1];
[correctSettingArray addObject:@"sfx = 1"];
}
else
{
[correctSettingArray removeObjectAtIndex:0];
[correctSettingArray addObject:@"sfx = 0"];
}
if (vibration)
{
[correctSettingArray removeObjectAtIndex:0];
[correctSettingArray addObject:@"vibration = 1"];
}
else
{
[correctSettingArray removeObjectAtIndex:0];
[correctSettingArray addObject:@"vibration = 0"];
}
[correctSettingArray writeToFile:path atomically:true];
}
先谢谢。
答案 0 :(得分:10)
如果您想保存这样的简单应用程序设置,请使用NSUserDefaults
[[NSUserDefaults standardUserDefaults] setBool:vibrationBool forKey:@"vibrationKey"];
然后当你想要阅读它
BOOL vibrationBool = [[NSUserDefaults standardUserDefaults] boolForKey:@"vibrationKey"];
答案 1 :(得分:0)
我认为您可以使用此保存为NSNumber ...
[NSNumber numberWithBool:BOOLATR]
并检索值...
BOOLATR = [[correctSettingArray objectAtIndex:X] boolValue]
在任何情况下,您可能更喜欢使用NSMutableDictionary进行变量匹配而不是数组。
[dictionary setValue:[NSNumber numberWithBool:BOOLATR] forKey:@"BOOLATR"];
&安培;
BOOLATR = [[dictionary valueForKey:@"BOOLATR"] boolValue]
答案 2 :(得分:0)
根据您的要求 - 保存用户设置 - 您应该按照 wattson12 的回答中所述使用NSUserDefaults
。
如果您确实需要将布尔属性保存到文件,假设您正在使用Objective-C对象,最简单的方法是使用 archive 并序列化您的数据结构通过实施NSCoding
协议。请参阅Apple的Archives and Serializations Programming Guide。
NSCoding
协议有两部分:initWithCoder
基本上是您对象的另一个构造函数:
- (id)initWithCoder:(NSCoder *)decoder
{
self = [super init];
if (self) {
if ([decoder containsValueForKey:@"sunNeverSet"])
self.sunNeverSet = [NSNumber numberWithBool:
[decoder decodeBoolForKey:@"sunNeverSet"]];
}
return self;
}
encodeWithCoder
是序列化:
- (void)encodeWithCoder:(NSCoder *)coder
{
if (sunNeverRise) [coder encodeBool:[sunNeverRise boolValue]
forKey:@"sunNeverRise"];
}
然后,您将使用NSData
将对象图编码为与平台无关的字节流(即NSKeyedArchiver
),并将数据写入文件。
NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]
initForWritingWithMutableData:data];
[archiver encodeRootObject:myObjectImplementingNSCoding];
[archiver finishEncoding];
[data writeToFile:path atomically:YES];
要阅读它,您将使用NSKeyedUnarchiver
对数据进行解码并返回对象图。
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]
initForReadingWithData:data];
id myObjectImplementingNSCoding = [[unarchiver decodeObject] retain];
[unarchiver finishDecoding];