Skip to content

Instantly share code, notes, and snippets.

@kenmaz
Last active December 19, 2015 09:28
Show Gist options
  • Save kenmaz/5932794 to your computer and use it in GitHub Desktop.
Save kenmaz/5932794 to your computer and use it in GitHub Desktop.
==MR初期化==
setupCoreDataStack
NSPersistentStoreCoordinator生成 (デフォルトsqlite)
rootCtx (savingRootCtx) 生成
coordinator指定
parent指定なし
Background queue
defaultCtx 生成 (-parent-> rootCtx)
parent = rootCtx
Main queue
==MOC取得==
+ (NSManagedObjectContext *) MR_context;
都度生成 (bg-ctx --> defaultCtx)
★通常はこっち使えばOK
+ (NSManagedObjectContext *) contextForCurrentThread;
main thread => defaultCtx
bg thread => threaddicに保存 ctx (bg queue) --parent--> defaultCtx
==fetch==
+ (id) MR_findFirst
contextForCurrentThread を使ってfetch
+ (id) MR_findFirstInContext:(NSManagedObjectContext *)context
指定context使って fetch
何回かfindXXXやって、まとめてhasChangeでチェックしたい場合などに、defaultContext hasChangeとかやると、変更ないことになってしまうので、必ずcontextforCurrentThreadで
==save==
- (void) MR_saveOnlySelfAndWait;
自分自身 + parentCtx に変更を保存 (persistent store には書き込まない)
内部でperformBlockAndWait使って完了を待つ
- (void) MR_saveOnlySelfWithCompletion:(MRSaveCompletionHandler)completion;
自分自身 + parentCtx に変更を保存 (persistent store には書き込まない)
内部でperformBlock使って即時応答
保存完了時にcompletionコールバックblock実行
peformBlock
mainスレッドで実行すると、performBlockの呼び先もmainスレッド
- (void) MR_saveToPersistentStoreAndWait;
- (void) MR_saveToPersistentStoreWithCompletion:(MRSaveCompletionHandler)completion;
自分自身 とすべての親ctxに変更を保存し、persistent store にまで書き込み
あとはおなじ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment