2014-02-20 56 views
0

我有一個方法,使用NSManagedObjectContext的副本在後臺線程中運行,NSManagedObjectContext在後臺線程根據Apple建議啓動時特別生成。從主線程managedobjectcontext從後臺線程請求標量值

在這個方法中,它調用一個類的共享實例,這個共享實例用於管理屬性值。

是管理性質的共享實例使用的NSManagedObjectContext在主線程,現在即使主線程在後臺線程的方法不應該使用的NSManagedObjectContext,應該不是真的,如果共享的屬性管理類做或做重要不使用這樣的上下文,因爲它只是將標量值返回到後臺線程(至少這是我的理解)。

那麼,爲什麼在從後臺線程調用時通過主線程上下文檢索值時共享屬性類會掛起?它不需要傳遞一個NSManagedObject,甚至不需要更新一個,所以我看不出它會產生什麼差異。

我可以理解,我的方法可能是錯誤的,但我想在基本層面理解爲什麼會這樣。目前我無法理解整個系統足以超越蘋果推薦的實現方法,這只是我不喜歡的黑魔法方法。

任何幫助,非常感謝。

回答

0

是否使用:

[theContext performBlock:^{ 
    // do stuff on the context's queue, launch asynchronously 
}]; 

- 或 -

[theContext performBlockAndWait:^{ 
    // do stuff on the context's queue, run synchronously 
}]; 

- 只是工作適合你?如果是這樣,你就完成了。

如果沒有,請長時間仔細研究您的上下文是如何設置,傳遞和使用的。如果它們都共享一個根上下文,那麼只要在當前上下文中始終查找任何對象ID,就應該能夠輕鬆地在它們之間「移動」數據。

上下文綁定到線程/隊列,基本上,所以總是使用給定的上下文作爲參考,以便在哪裏工作。 performBlock:是這樣做的一種方法。

+0

我會盡快給出結果並對結果提供反饋。 –