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

}

提前致谢。

4

3 回答 3

10

如果您想保存这样的简单应用程序设置,请使用NSUserDefaults

[[NSUserDefaults standardUserDefaults] setBool:vibrationBool forKey:@"vibrationKey"];

那么当你想读它的时候

BOOL vibrationBool = [[NSUserDefaults standardUserDefaults] boolForKey:@"vibrationKey"];
于 2012-10-02T07:36:26.283 回答
0

对于您所要求的 - 保存用户设置 - 您应该按照wattson12NSUserDefaults的回答中所述使用。

如果您确实需要将布尔属性保存到 file,假设您正在使用 Objective-C 对象,最简单的方法是使用归档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"];
}

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

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];
于 2012-10-02T08:12:53.157 回答
0

我认为你可以使用这个保存为 NSNumber ......

[NSNumber numberWithBool:BOOLATR]

并检索价值……

BOOLATR = [[correctSettingArray objectAtIndex:X] boolValue]

在任何情况下,您都可能更喜欢使用 NSMutableDictionary 进行变量匹配而不是数组。

[dictionary setValue:[NSNumber numberWithBool:BOOLATR] forKey:@"BOOLATR"];

&

BOOLATR = [[dictionary valueForKey:@"BOOLATR"] boolValue]
于 2012-10-02T07:41:00.157 回答