0

plist にデータを読み書きするクラスに問題があります。ここにいくつかのコードがあります:

この最初のチャンクは、すべての plist 読み取りおよび書き込みメソッドを含むカスタム クラスからのものです。

-(NSString *) dataFilePath{
    NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirectory = [path objectAtIndex:0];
    return [documentDirectory stringByAppendingPathComponent:@"userInformation.plist"];
}

-(bool)readUserIsMale{
    NSString *filePath = [self dataFilePath]; 
    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {        
        NSDictionary *boolDict = [[NSDictionary alloc] initWithContentsOfFile:[self dataFilePath]];
        return [[boolDict objectForKey:@"boolUserIsMale"] boolValue];
    }
    return nil;
}

-(void)writeUserIsMale:(bool)boolValue{
    NSDictionary *boolDict = [[NSDictionary alloc] init];
    [boolDict setValue:[NSNumber numberWithBool:boolValue] forKey:@"boolUserIsMale"];
    [boolDict writeToFile:[self dataFilePath] atomically:YES];
}

次に、別のクラスで必要なインポート、作成、およびクラス メソッドの使用を行います。

#import "plistReadWrite.h"
plistReadWrite *readWrite;

コンソールでその値を確認しようとすると、(null) が返されます。

NSLog(@"%@",[readWrite readUserIsMale]);

これはもちろん、次のようなデータを書き込んだ後です。

[readWrite writeUserIsMale:isUserMale];

isUserMaleブール値であること。

さらに情報が必要な場合はお知らせください。ありがとう。

4

1 に答える 1

0

これはおおむね正しいと思います。writeUserIsMale: メソッドでは、変更可能な辞書が必要なため、実際にそのキーを設定できます (これはそのままクラッシュするはずなので、コピー/貼り付けの問題だと思いますか?)

//NSDictionary *boolDict = [[NSDictionary alloc] init];
//should be:

NSMutableDictionary *boolDict = [[NSMutableDictionary alloc] init];

そして、値をログに記録するときは、bool (または BOOL) がオブジェクトではなくプリミティブであることを思い出してください。

NSLog (@"%d",[readWrite readUserIsMale]); // Will print 0 or 1
// or if you prefer:
NSLog (@"%@", ([readWrite readUserIsMale]? @"YES":@"NO")); // print YES or NO

最後に、これは Objective-C であるため、おそらく bool の代わりに BOOL を使用します。

これは単純な例にすぎず、この種の NSUserDefaults について知っていると思います。

それが役立つことを願っています。

于 2011-11-11T01:51:38.227 に答える