С последней версией Core Data
спасительной контекст работник, как это:Как реализовать сохранение в «старых» базовых данных?
open class func upsertClient(completionOnMain: @escaping() ->()) {
let contextTemporary = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
contextTemporary.parent = context
contextTemporary.perform {
try! contextTemporary.save()
context.perform {
try! context.save()
completionOnMain()
}
}
}
Кусок торта.
Но как это сделать, если мне нужно использовать registerListener
и onPostSave
событие?
Я создал глобальное завершение закрытия и выполнил и очистил его в onPostSave
. Но поскольку он написан из двух разных потоков, иногда выполнение выполняется два раза. Ниже приведен код JAVA. Используя старый Core Data
, реализованный для Android под названием nexus-data
, не беспокойтесь об этом, это похоже на iOS. Поиск решения псевдокода.
public static void upsertClient(final Runnable completionRunnable) {
saveCompletionHandler = completionHandler;
saveCompletionRunnable = completionRunnable;
contextWorker.save();
}
ObjectContextNotifier.registerListener(new ObjectContextNotifier.DefaultObjectContextListener() {
@Override public void onPostSave(ObjectContext c, ChangedObjectsSet changedObjects) {
// ensure that the notification we just got is not from our own context, and that it's from a context using a
// persistence store that our context is also using.
if (c != context && c.getPersistentStoreCoordinator() == context.getPersistentStoreCoordinator()) {
// do saving
}
saveCompletionRunnable = null;
saveCompletionHandler = null;
}
});
Что такое 'registerListener' и' onPostSave'? Они не являются частью Core Data. –
Существует реализация данных Core Core для Android. Разработчик разработчика ethusiast iOS сделал это. Соглашение об именовании и подход похожи на iOS! Он содержит базовые функции Core Data. ORM для Android. https://github.com/dkharrat/NexusData Мне это очень нравится, мне просто нужно «понизить», чтобы работать. Необходимо отказаться от того, сколько лет работало Core Data в iOS, а также в контексте патента и ребенка. –