Список чтения и записи iPhone

#iphone #objective-c #ipad #plist #read-write

#iPhone #objective-c #iPad #список #чтение-запись

Вопрос:

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

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

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

Ответ №1:

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

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