将bool属性保存到iOS中的文件。

时间:2012-10-02 07:31:13

标签: iphone objective-c ios xcode nsuserdefaults

我想将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 个答案:

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