Полагаю, вам следует изменить код на:
contactsToProcess=[NSKeyedUnarchiver unarchiveObjectWithFile:fPath()];
if (contactsToProcess==nil)
{
contactsToProcess=[[NSMutableArray alloc] init];
NSLog(@"Array with objs initialized");
}
...
тогда все должно работать. Некоторое объяснение: код, который вы разместили, будет работать только так, как вы ожидаете, если файл quickdial.xml
уже присутствует; он не сможет создать файл с правильным содержимым (или вообще создать его, я не знаю, каков точный эффект архивации указателя nil
). Действительно, когда файл не существует, после выполнения вами исходного кода:
if (contactsToProcess==nil)
{
contactsToProcess=[[NSMutableArray alloc] init];
NSLog(@"Array with objs initialized");
}
contactsToProcess=[NSKeyedUnarchiver unarchiveObjectWithFile:fPath()];
contactsToProcess
будет ноль; это означает, что все последующие операции с ним не будут иметь никакого эффекта, и вы архивируете указатель nil
. Т.е., когда файл не существует, он не будет создан с массивом, как вы ожидаете. Это то, что происходит на вашем устройстве.
Моя гипотеза состоит в том, что вы запустили программу в другом состоянии на симуляторе и что ваш массив был успешно заархивирован в файл. Затем вы изменили программу в текущее состояние; на симуляторе он продолжает работать, потому что файл там и содержит заархивированный массив. На устройстве файл не создан или содержит nil
, поэтому он не работает должным образом.
Я бы предложил удалить приложение с устройства (нажимайте на значок приложения, пока не войдете в режим редактирования панели мониторинга, затем нажмите на кнопку удаления); затем примените предложенное выше изменение и повторите процедуру.