Сборка и запуск: plist не обновляется

У меня есть plist в моем комплекте ресурсов, который я копирую по ссылке на папку. По какой-то причине мой отредактированный и сохраненный (в Xcode) plist не копируется/не обновляется, пока я не удалю приложение. В противном случае старый plist (до редактирования) копируется, даже если я удаляю приложение. Остаются ли данные?

Plist довольно часто редактируется, поэтому отладка таким образом занимает очень много времени. Как я могу убедиться, что plist скопирован правильно?


person Morrowless    schedule 16.05.2011    source источник
comment
удаление и переустановка решили мою проблему в среде отладки... спасибо   -  person jeet.chanchawat    schedule 27.03.2014


Ответы (2)


Вы копируете файл plist в папку «Документы»? если вы копируете это, вы должны удалять приложение из симулятора iPhone каждый раз, когда запускаете приложение.

Вы также можете сделать одну вещь... вы можете копировать файл в папку документов каждый раз, когда вы запускаете приложение. Поскольку содержимое папки с документами можно удалить, только удалив приложение из симулятора/устройства.

Тогда нет необходимости перезапускать симулятор/устройство и xcode.

person Saurabh    schedule 16.05.2011
comment
Plist копируется в пакет ресурсов, а не в документы. Поэтому я ожидаю, что данные ресурсов будут удалены при удалении приложения, но удаление одного приложения этого не делает. - person Morrowless; 16.05.2011
comment
Нет, данные из ресурса не могут быть удалены, вы должны удалить их вручную. Кстати: если вы не копируете файл в Документах, вы не сможете его редактировать. - person Saurabh; 16.05.2011
comment
Я должен четко указать, что редактирование выполняется в Xcode, а не во время выполнения. - person Morrowless; 16.05.2011
comment
тогда вам нужно всегда удалять его вручную из xcode... перетащите новый файл plist, а также удалите приложение из симулятора... другого пути нет! - person Saurabh; 16.05.2011
comment
Однако это не новый файл plist. Я просто редактирую и сохраняю в существующий plist, но по какой-то причине редактирование не отображается. - person Morrowless; 16.05.2011
comment
затем попробуйте удалить приложение из симулятора и очистить сборку и запустить - person Saurabh; 16.05.2011
comment
Хорошо, перезагрузка не понадобилась, но мне все равно нужно удалить приложение, чтобы редактирование отразилось. Возможно, это как-то связано со ссылкой на папку, а не с копированием. - person Morrowless; 16.05.2011
comment
Я думаю, что это связано с файловой системой Mac/iPhone. Если файл уже существует из старой программы, ОС не копирует этот файл из новой установки/программы. Я столкнулся с этой проблемой во время работы над проектом Mac. Я создаю файл pkg из приложения и устанавливаю его на свой компьютер. Когда я изменяю какой-либо ресурс в программе, создаю установочный файл и устанавливаю его снова (без полного удаления предыдущей версии), новые файлы не заменяются. Мне пришлось удалить предыдущую настройку вручную - person Saurabh; 16.05.2011
comment
Я предполагаю, что это то, что происходит, и если это так, мне нужно каждый раз удалять приложение. - person Morrowless; 16.05.2011
comment
Я обнаружил, что очистка сборки shift+cmd+k помогла, но это кажется довольно непостоянным. - person simon_smiley; 06.11.2014

Это устаревший ответ; но эй, ОП не отметил правильный ответ, так что вот мое решение. Я создал два списка свойств. Первый — это отладочная информация, такая как постоянные числа, строки и логические значения. Я назвал этот список свойств SETTINGS.plist. Другой мой plist — это тот, который я использую для сохранения игровых данных. Поскольку список SETTINGS обновляется через интерфейс xcode, я обновляю его каждый раз, когда запускаю приложение.

-(void)setUpPlist{

listPath = [[self docsDir] stringByAppendingPathComponent:@"SETTINGS.plist"];

if (![[NSFileManager defaultManager] fileExistsAtPath:listPath]) {
    [[NSFileManager defaultManager] copyItemAtPath:[[NSBundle mainBundle] pathForResource:@"SETTINGS" ofType:@"plist"] toPath:listPath error:nil];

}
else {
    [[NSFileManager defaultManager] removeItemAtPath:listPath error:nil];
    [[NSFileManager defaultManager] copyItemAtPath:[[NSBundle mainBundle] pathForResource:@"SETTINGS" ofType:@"plist"] toPath:listPath error:nil];
}

savedData = [NSMutableDictionary dictionaryWithContentsOfFile:listPath];
}

-(NSString *)docsDir{
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
}

Здесь listPath имеет тип NSString, а saveDate — тип NSMutableDictionary. Надеюсь это поможет.

person Andriko13    schedule 07.11.2014