2014-04-28 30 views
1

我有一個NSManagedObject類,我已經添加了一個自定義實例變量,通過使它成爲一個屬性並使用@synthesize(但不使用核心數據模型中的'transient')。如果我設置了該值並稍後在同一個線程中進行讀取,此工作正常;但是如果我在不同的線程中爲該屬性設置值,它仍然在主線程上顯示爲零。NSManagedObject - 跨線程設置自定義實例變量

舉個例子,想想這個:

@interface Person : NSManagedObject{ 

} 
@property (nonatomic, strong) UIImage *personImage; // unmodeled 

如果我在後臺線程設置的personImage對象,它仍然在主線程「零」。

有沒有辦法解決這個問題,以便該屬性實際上存儲跨線程的值?

回答

2

沒有辦法「修復」它,因爲它沒有被破壞。每個上下文(以及每個線程)將有一個單獨的NSManagedObject實例。它們在內存中是完全不同的對象,不會共享實例變量。您將需要在每個實例中初始化該實例變量。

這就是爲什麼awakeFromInsertawakeFromFetch觸發每個上下文。它使您有機會初始化這些實例變量。

+0

謝謝。我想那麼沒有辦法直接從不同的線程合併數據,沒有一些中間緩存從 –

+0

正確讀取/寫入。如果你正在存儲一個圖像,你應該有一個超出'NSManagedObject'的緩存,無論如何你的UI可以訪問,並且你可以控制內存的釋放等等。 –