Plist для чтения и записи iPhone - PullRequest
0 голосов
/ 11 ноября 2011

У меня проблемы с моим классом, который читает и записывает данные в список.Вот некоторый код:

Этот первый блок взят из моего пользовательского класса со всеми моими методами чтения и записи 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;

Если я попытаюсь увидеть его значение в консоли, я получу (ноль) return.

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

Это, конечно, после того, как я записал некоторые данные, например,:

[readWrite writeUserIsMale:isUserMale];

isUserMale - это значение bool.

Любая помощь будет высоко оценена, если вам потребуется дополнительная информация, дайте мне знать.Благодаря.

1 Ответ

0 голосов
/ 11 ноября 2011

Я думаю, что это в основном правильно. В вашем 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

Наконец, так как это target-c, я бы, вероятно, использовал BOOL вместо bool.

Я предполагаю, что это всего лишь простой пример, и вы знаете о NSUserDefaults для такого рода вещей.

Надеюсь, это поможет.

...