Кажется, что вы перезаписывали свои любимые файлы при каждом запуске приложения, в appDidFinishLaunching вы создаете новый словарь и сохраняете его в сохраненные данные. Теперь, если вы прочитаете его в detailViewController, вы получите новый пустой словарь.
Это объясняет, почему вы используете свои данные, если iPhone перезагружается, поскольку при выключении и включении устройства ваши файлы, сохраненные в каталоге «Документы», не удаляются.Этот каталог существует для того, чтобы вы могли сохранять свои данные и хранить их безопасно между перезапусками, в противном случае это не имело бы никакого смысла, и тогда его следует называть «tmp», которого нет.
EDIT
Предложение: загружайте его только один раз в appDidFinishLoading, сохраняйте при каждом изменении или просто выходя из приложения (applicationDidEnterBackground и / или applicationWillTerminate - первое, если вы поддерживаете многозадачность, и второе в противном случае), и с вами все должно быть.
РЕДАКТИРОВАТЬ
Я использую NSKeyedArchiver и NSKeyedUnarchiver, поэтому сохраняйте данные:
[NSKeyedArchiver archiveRootObject: d toFile: filePath];
, а затем восстанавливайте:
NSMutableDictionary *d = [NSKeyedUnarchiver unarchiveObjectWithFile: filePath];
if (d == nil) {
d = [[NSMutableDictionary alloc] init];
}
Вы также можете попробовать это: + (id)dictionaryWithContentsOfFile:(NSString *)path
класса NSDictionary, чтобы получить словарь из файла:
delegateFavouritesDictionary = [NSMutableDictionary dictionaryWithContentsOfFile: filePath];
if (delegateFavouritesDictionary == nil) {
delegateFavouritesDictionary = [[NSMutableDictionary alloc] init];
}
, поскольку вы видите, что вам не нужно проверять, существует ли файл, так как в случае любой ошибки вы получите nil, в этом случае вы создадите пустой экземпляр.