2016-05-30 91 views
4

我使用Realm來存儲我的模型對象。在我的對象中,我有一個從它自己的屬性值生成NSData的函數。這一代可能會很長,所以我想用在線程中生成我的NSData如何處理線程和領域? (iOS)

我的問題是Realm數據訪問只能在Realm創建實體(實際上是主線程)上實現。所以當我在一個線程中訪問我的RealmObject屬性時,應用程序崩潰。根據Realm規格,這是正常的。但是,根據Realm限制,在線程中生成我的NSData的最佳解決方案是什麼?

其實我有兩個想法:

  • 做出領域特定調度隊列,讓我所有的境界訪問寫在這個隊列中
  • 得到需要一個臨時結構(所有屬性或一組變量)並使用這個結構/變量來在一個線程中生成我的NSData

我假設很多Realm用戶需要處理線程和Realm,那麼你在這種情況下做了什麼?

回答

4

將對象ID傳遞給單獨線程中運行的代碼。在該線程內創建一個Realm實例(let realm = try! Realm())並檢索您的對象。然後你可以做你的長輩,並返回一個回調結果。

let objectId = "something" 
dispatch_async(queue) { 
    let realm = try! Realm() 
    let myObject = realm.objectForPrimaryKey(MyObject.self, key: objectId) 
    let result = myObject.longOperation() 

    // call back with results 
} 

let objectRef = ThreadSafeReference(to: myObject) 
DispatchQueue(label: "background").async { 
    let realm = try! Realm() 
    guard let myObject = realm.resolve(objectRef) else { 
    return // object was deleted 
    } 

    let result = myObject.longOperation() 
    // call back with results 
} 
+0

那的作品!謝謝 –