plist как постоянное хранилище для хранения и извлечения данных между закрытием и перезапуском приложения - PullRequest
0 голосов
/ 16 ноября 2010

Я пытаюсь сохранить несколько свойств в plist, когда пользователь запускает приложение в первый раз, а затем мне нужно извлечь эти данные и показать их пользователю, когда пользователь перезапустит приложение, чтобы я не нужно снова запрашивать те же данные.

Полагаю, это должно быть очень прямолинейно, но, может быть, я что-то упустил.

Было бы неплохо, если бы кто-то мог указать мне пример кода для того же действия, было бы неплохо, если бы код сохранял и извлекал данные из словаря в plist и из plist в словарь.

Я заглянул в руководство по программированию списка свойств Apple и использовал код из данных списка чтения и записи свойств

http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PropertyLists/ReadWritePlistData/ReadWritePlistData.html#//apple_ref/doc/uid/10000048i-CH8-SW1

но, когда я перезапускаю свое приложение, я не возвращаю данные, которые я сохранил.

* EDIT *

Я добавляю некоторый код, чтобы кто-то мог указать, если я делаю какую-либо ошибку.

Я создал файл plist «Data.plist» в папке ресурсов моего проекта.

Так я сохраняю данные в одном из моих контроллеров представления

    NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"Data.plist"];
//NSString *error;

NSMutableDictionary *dict = [NSMutableDictionary dictionary];


[dict setObject:@"xxxxxx" forKey:@"phoneNumber"];
[dict setObject:@"password" forKey:@"password"];
[dict setObject:@"email" forKey:@"email"];

[dict writeToFile:finalPath atomically:NO];

Вот как я читаю данные в том же методе viewDidLoad контроллера представления, потому что я хочу загрузить данные с момента следующего запуска приложения.

    NSDictionary *dictionary;

// read "Data.plist" from application bundle
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"Data.plist"];
dictionary = [NSDictionary dictionaryWithContentsOfFile:finalPath];

// dump the contents of the dictionary to the console
for (id key in dictionary) {
    NSLog(@"bundle: key=%@, value=%@", key, [dictionary objectForKey:key]);
}   

Перед сохранением в файл я могу сделать "po dict" на GDB и посмотреть, есть ли данные в файле

NSLog печатать следующую ошибку

Ошибка подтверждения: (cls), функция getName, файл /SourceCache/objc4_Sim/objc4-427.1.1/runtime/objc-runtime-new.m, строка 3939.

Потому что, когда я загружаю данные и делаю "словарь по" в GDB, он пуст

1 Ответ

0 голосов
/ 17 ноября 2010

-[NSDictionary writeToFile:atomically:] возвращает YES или NO в зависимости от того, успешно оно или нет. Вы проверяете возвращаемое значение?

Если бы мне пришлось сделать предположение, я бы сказал, что это потому, что вы записываете файл в комплект приложения. Вы должны написать это в другом месте файловой системы; ~/Library/Application Support/<application name> - это обычное местоположение.

Edit:

Вы можете проверить возвращаемое значение следующим образом:

BOOL success = [dict writeToFile:finalPath atomically:YES];
if (!success) {
    NSLog(@"Could not write file");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...