2009-12-09 3 views
1

Я использую что-то вроде кода ниже, чтобы сохранить NSDictionary объектов на устройстве. Есть ли способ открыть этот архив, перейдите в элементы Словаря, которые он содержит, и в идеале , отредактируйте данные? Я полагаю, что нет, не надежно, поскольку оптимизация, сделанная при сохранении, затрудняет интерпретацию архива ... по крайней мере, это выглядит так, когда открывается что-то вроде Редактор списка свойств. Например, если некоторые из моих объектов имеют аналогичную NSString, похоже, что NSString только архивируется один раз ... изменяя структуру NSDictionary от того, что я ожидал.Возможно надежно открыть и отредактировать архив NSKeyedArchiver?

- (BOOL)writeDataToFile { 
NSMutableData *data = [[NSMutableData alloc] init]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
[archiver encodeObject:myDictionary forKey:kDataKey]; 
[archiver encodeInteger:kDataFileVersion forKey:kDataVersionKey]; 
[archiver finishEncoding]; 
BOOL success = [data writeToFile:[self dataFilePath] atomically:YES]; 
[archiver release]; 
[data release]; 
return success; 
} 

ответ

1

Реальный вопрос: «должны ли вы?». ... возможно нет.

Конечно, вы можете разобрать формат файла, но этот формат представляет собой деталь реализации, которая может быть изменена , и это просто не стоит.

Почему вы пытаетесь это сделать? Вы пытаетесь сделать инкрементные изменения a la Core Data + sqlite? Будет ли простой старый sqlite самостоятельно решить вашу проблему?

+0

Мне было просто любопытно, может быть, я не замечал или не знал, что-то * вещь * или какой-то инструмент *, который мог бы анализировать эти файлы. Зачем? В основном, чтобы проверить, как приложение реагировало на различные типы данных в архиве. Ничего не связано с CD или SQLite. – Meltemi

+0

Это довольно бесполезный ответ на действительный запрос. Например, мне нужно сравнить две версии такого файла plist (т. Е. Файлы «layout» и «elements», созданные редактором схемы основных данных Xcode. В этом случае сравнение исходных файлов plist, даже когда они превращаются в текстовые слои , не работает хорошо, так как многие идентификаторы могут быть изменены, даже если в модель были внесены незначительные изменения. Мне нужно увидеть компоновку объектов этих архивных объектов, чтобы сообщить, что действительно изменилось. –

+0

Факт остается фактическим внутренним кодирование этих файлов - это деталь реализации, которая может измениться с одной версии операционной системы на другую. Маловероятно, но это будет плохая идея, чтобы попытаться разобрать ее вручную и совершенно глупо, чтобы попытаться записать ее снова. структура данных и имена ее ключей заблаговременно, чтобы иметь возможность сделать это безопасно. Даже тогда класс * real *, который сворачивает его, может сделать что-то внутреннее в архивах, созданных для более ранней версии этого класса. ** BAD IDEA. ** –

 Смежные вопросы

  • Нет связанных вопросов^_^