NSKeyedUnarchiver: iPhone .v. имитатор - PullRequest
       5

NSKeyedUnarchiver: iPhone .v. имитатор

0 голосов
/ 13 декабря 2010

Я делаю:

NSString *current_path = [[NSBundle mainBundle] bundlePath];

NSString *string_path = [NSString stringWithFormat:
                                    @"%@/filedstring", current_path];

my_string_ = [[NSKeyedUnarchiver unarchiveObjectWithFile:string_path] retain];

Заархивированная строка - это текст из UITextField, который мы здесь разархивируем.Я пробовал с и без current_path.

. Все это прекрасно работает при работе в симуляторе (член класса NSString *my_string_ не равен нулю), но при запуске на моем iPhone my_string_ равно нулю.

Почему это так?


Спасибо за быстрый ответ всем.

Добавление к ответу Джейсона Коко, архивация и разархивация здесь:

NSString *library_path = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,
                                         NSUserDomainMask, YES) objectAtIndex:0];
NSString *username_path = [library_path 
                           stringByAppendingPathComponent:@"Caches/filedstring"];

Ответы [ 2 ]

4 голосов
/ 13 декабря 2010

Вы не можете написать в основной пакет на телефоне, это не разрешено. Вот почему вы не найдете там свой архив позже. Симулятор, поскольку он на самом деле работает на Mac OS X, не работает таким образом, поэтому он на самом деле записывает файл.

Если вам нужно что-то написать, вы должны использовать один из доступных для записи путей, доступных для вашего приложения. Для получения дополнительной информации см. Руководство по программированию приложений iOS / Файловая система . Если вы собираетесь заниматься разработкой приложений для iOS, вам обязательно следует прочитать и понять весь этот документ.

0 голосов
/ 13 декабря 2010

Как говорит @middaparka, возможно, что-то не так с этим файлом.Вот как я могу отладить эту проблему:

Первый шаг,

[[NSFileManager defaultManager] fileExistsAtPath: string_path];

Второй шаг,

NSError *err;
NSString *tmp = [NSString stringWithContentsOfFile:string_path encoding:NSUTF8StringEncoding error:&err];
NSLog(@"Contents of string %@",tmp);

После того, как вы это сделали, у вас должно быть многоБолее четкая идея, почему ваш NSKeyedUnarchiver терпит неудачу.Кроме того, проверьте NSString stringByAppendingPathComponent: метод.

...