簡體   English   中英

多個NSPersistentStoreCoordinator實例可以連接到同一個底層SQLite持久性存儲嗎?

[英]Can multiple NSPersistentStoreCoordinator instances be connected to the same underlying SQLite persistent store?

我讀過的關於在多個線程上使用Core Data的所有內容都討論了使用多個共享單個NSPersistentStoreCoordinator NSManagedObjectContext實例。 這是理解的,我已經使它在一個應用程序中工作,該應用程序在主線程上使用Core Data來支持UI,並且具有可能需要一段時間才能運行的后台獲取操作。

問題是NSPersistentStoreCoordinator基礎SQLite持久性存儲的訪問進行序列化,因此仍然存在背景提取操作阻止UI的情況。

后台獲取操作永遠不會更新數據,只能從中讀取數據。 我可以在連接到相同底層SQLite持久性存儲的后台線程上設置完全並行的Core Data堆棧( NSManagedObjectContextNSManagedPersistentStoreCoordinatorNSManagedObjectModel )嗎? 看起來這樣可以在UI線程和后台獲取操作之間提供完全的並發性。

我對此的初步答案現在是肯定的

我通過傳遞NSPersistentStore實例初始化我的后台操作。 在后台線程中,此存儲的屬性(包括URL)用於創建一個全新的Core Data堆棧,如下所示:

    //  create managed object model
    NSURL *modelUrl = [[NSBundle bundleForClass:[self class]] URLForResource:@"..." withExtension:@"..."];
    NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelUrl];

    //  create persistent store coordinator
    NSPersistentStoreCoordinator *persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel];
    NSError *error = nil;
    [persistentStoreCoordinator addPersistentStoreWithType:[store type]
                                            configuration:[store configurationName]
                                                      URL:[store URL]
                                                   options:[store options]
                                                     error:&error];

    //  create managed object context
    NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
    [context setPersistentStoreCoordinator:persistentStoreCoordinator];
    [persistentStoreCoordinator release];
    [managedObjectModel release];

然后,我使用這個新創建的NSManagedObjectContext實例執行后台獲取。

一切似乎都很好。 不過,我還沒有接受我自己的答案,因為我希望有人能為我的研究結果提供支持或反對的證據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM