NSKeyedArchiver работает в симуляторе iPhone, не работает на устройстве - PullRequest
4 голосов
/ 08 июня 2009

У меня есть простое приложение, которое пытается сохранить некоторые данные между вызовами, используя NSKeyedArchiver / NSKeyedUnarchiver. Он отлично работает на симуляторе, но когда я экспортирую его на реальное оборудование iPhone, NSKeyedArchiver не может записать на диск.

Я использую метод класса

[NSKeyedArchiver archiveRootObject: myRootObject toFile: @ "data.archive"]

Все мои объекты в myRootObject реализуют протокол NSCoding. Опять же на симуляторе это возвращает ДА ​​и все хорошо. На устройстве это возвращает NO и ничего не сохранено. (Оба 2.2.1)

Есть ли какое-либо разрешение на запись или что-то, что приложение должно иметь возможность записи на HD телефона? Кто-нибудь уже видел это?

Заранее спасибо за помощь.

Ответы [ 2 ]

10 голосов
/ 08 июня 2009

Я предполагаю, что вы не указали путь к файлу, указывающий на каталог в вашем комплекте? Я думаю, что вы можете написать в папку Documents под вашим NSBundle.

Попробуйте создать путь к файлу следующим образом:

// Documents directory
NSArray *paths =
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                    NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];

// <Application Home>/Documents/foo.arch
NSString *fooPath =
[documentsPath stringByAppendingPathComponent:@“foo.arch”];

А затем передайте "fooPath" в качестве пути к файлу в используемом вами методе, посмотрите, поможет ли это.

1 голос
/ 08 июня 2009

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

Вот что исправили все:

NSString *localPath = @"Documents/my.archive";
NSString *fullPath = [NSHomeDirectory() stringByAppendingPathComponent:localPath];
[NSKeyedArchiver archiveRootObject:archive toFile:fullPath];

См. Также аналогичная тема

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...