0
隨着近年來節省了工人的上下文版本的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'?他們不是核心數據的一部分。 –
有一個核心數據的Android實現。一位道德嚴謹的iOS開發人員製作了它。命名約定和方法就像在iOS中一樣!它包含核心數據的基本功能。 Android的ORM。 https://github.com/dkharrat/NexusData我真的很喜歡它,我只需要'降級'的東西去工作。需要低估在Core-Data iOS之前的工作時間,在專利子上下文之前。 –