Я использую Core Data в своем приложении и обнаружил нечетное поведение симулятора: когда я добавляю некоторые данные в Core Data в свое приложение и выхожу из симулятора, используя кнопку «Stop» в XCode (или просто нажмите Cmd-Q) сразу же данные не сохраняются в базе данных при следующем запуске симулятора. После некоторого тестирования я узнал, что данные хранятся на диске:Когда Core Data сбрасывается на диск?
- немедленно, если я нажму кнопку дома. (Почти - это : можно закрыть приложение до того, как данные будут сохранены, если выходите очень быстро.)
- Если я запустил приложение на некоторое время (не менее 20 секунд) после добавления данных.
Это не поможет вызвать [NSManagedObjectContext save:]. Поведение такое же.
Так что мой вопрос: в чем причина такого поведения? Есть ли способ принудительно промыть диск перед выходом? И есть ли риск, что я могу потерять данные таким образом при работе на устройстве (лично я не вижу ничего, кроме силы закрытия, но странное поведение меня немного беспокоит)
Это правильно. Вызов '[context save: & error]; [[context parentContext] save: & error]; 'выполняет задание, и данные немедленно сохраняются на диске. Я должен сделать оба вызова (что разумно), но, на удивление, не имеет значения, если я сначала вызову save в контексте или parentContext! У вас есть объяснение? – JRV
BTW, как примечание для других: я сам не создал вложенные контексты, так что это происходит «за кулисами». – JRV
Вы должны * не * называть '[[context parentContext] save: & error]' на thead контекста, который не является потокобезопасным (как я указал). Вам нужно вызвать '[[context parentContext] executeBlock: ^() {[[context parentContext] save: NULL]}];' (или тому подобное) –