#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 для такого рода вещей.
Надеюсь, это поможет.