在iOS中将布尔属性保存到文件

3

我想将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];

}

提前感谢你。

3个回答

10
如果你想要保存像这样的简单应用程序设置,请使用NSUserDefaults
[[NSUserDefaults standardUserDefaults] setBool:vibrationBool forKey:@"vibrationKey"];

然后当你想要读取它时

BOOL vibrationBool = [[NSUserDefaults standardUserDefaults] boolForKey:@"vibrationKey"];

1
如果布尔值是可选的,您需要检查其是否存在:[[NSUserDefaults standardUserDefaults] objectForKey:@"key"] != nil)。简写方法boolForKey:在参数未设置的情况下返回NO - Palimondo
谢谢,如果我想在应用程序终止后恢复这些设置,我应该将这些设置保存到数据库/文件中,还是SDK会神奇地处理它? - BW4
1
NSUserDefaults会被系统定期保存,但如果您在终止应用程序后看到返回值不正确的情况,请尝试在设置值后调用[[NSUserDefaults standardUserDefaults] synchronize];。这将使当前值持久化。您无需担心自己将它们写入磁盘。 - wattson12

0

我认为你可以使用以下方法将其保存为NSNumber...

[NSNumber numberWithBool:BOOLATR]

并获取执行的值...

BOOLATR = [[correctSettingArray objectAtIndex:X] boolValue]

无论如何,您可能更喜欢使用NSMutableDictionary来进行变量匹配,而不是使用数组。
[dictionary setValue:[NSNumber numberWithBool:BOOLATR] forKey:@"BOOLATR"];

&

BOOLATR = [[dictionary valueForKey:@"BOOLATR"] boolValue]

0
对于您所询问的“保存用户设置”,您应该使用NSUserDefaults,如wattson12的答案所述。
如果您真的需要将布尔属性保存到文件中,并且您正在使用Objective-C对象,则最简单的方法是使用archive并通过实现NSCoding协议来序列化数据结构。请参阅苹果公司的Archives and Serializations Programming GuideNSCoding协议有两个部分: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"];
}

然后,您将使用NSKeyedArchiver将对象图编码为平台无关的字节流(即NSData),并将数据写入文件。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接