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

これを使って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 に答える
0

質問する内容(ユーザー設定の保存)については、 wattson12NSUserDefaultsの回答で説明されているように使用する必要があります。

ブールプロパティをファイルに保存する必要がある場合、Objective-Cオブジェクトを使用している場合、最も簡単な方法は、アーカイブNSCodingを使用し、プロトコルを実装してデータ構造をシリアル化することです。Appleのアーカイブおよびシリアル化プログラミングガイドを参照してください。

NSCodingプロトコルには2つの部分があります。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];
于 2012-10-02T08:12:53.157 に答える