2016-10-02 147 views
0

我正在嘗試使用記錄的方法之一來遷移領域數據庫並設置架構版本。我正在使用的代碼的類型是:領域遷移,從何初始化

let config = Realm.Configuration(
    // Set the new schema version. This must be greater than the previously used 
    // version (if you've never set a schema version before, the version is 0). 
    schemaVersion: 1, 

    // Set the block which will be called automatically when opening a Realm with 
    // a schema version lower than the one set above 
    migrationBlock: { migration, oldSchemaVersion in 
     // We haven’t migrated anything yet, so oldSchemaVersion == 0 
     if (oldSchemaVersion < 1) { 
      // Nothing to do! 
      // Realm will automatically detect new properties and removed properties 
      // And will update the schema on disk automatically 
     } 
}) 

// Tell Realm to use this new configuration object for the default Realm 
Realm.Configuration.defaultConfiguration = config 

這似乎是非常標準的代碼,並且看起來被別人使用。然而,似乎讓我絆倒的是我正在初始化導致架構設置不設置或持續的Realm實例。

我所用是掙扎在哪裏設置如下代碼:

let uiRealm = try! Realm() 
  • 如果我把這個在AppDelegate中的頂部上方如果我創建一個控制器@UIApplicationMain它初始化太早
  • 文件,我打算在遷移後調用一個函數,並將其放在頂部,但仍然不起作用
  • 如果我將它放在ViewController的類中,如下面的代碼所示,錯誤Instanc Ë成員uiRealm不能在類型XYZViewController使用

    import UIKit 
    import RealmSwift 
    
    class XYZViewController: UITableViewController,UIPickerViewDataSource,UIPickerViewDelegate { 
    
        let uiRealm = try! Realm() 
        var scenarios = uiRealm.objects(Scenario).filter("isActive = true ") 
    
    } 
    

所以我的問題是:是否有在哪裏初始化的最佳做法,以及如何最好地遷移。

回答

1

在代碼的任何其他部分調用Realm()之前,您需要確保已將您的Configuration對象設置爲您的Realm默認配置。

最佳做法是不要拘泥於任何對Realm()的引用,除非您有非常好的理由。每次調用Realm()時,它都會返回一個先前緩存的對象實例,因此創建對實例的引用並在應用程序的生命週期中掛起該實例並沒有性能優勢。

在代碼有機會致電Realm()之前,儘可能快地設置包含遷移信息的Configuration對象的最佳位置。所以應用程序代表是一個很好的地方。

如果您已經預先配置了依賴於Realm()的類屬性,則可能會幫助將lazy關鍵字預先添加到這些屬性中,以便延遲創建時間,直到您真正需要它們。

+0

感謝您的支持,那麼如何將以下內容轉換爲惰性初始化? scenario = uiRealm.objects(Scenario).filter(「isActive = true」)。如果我只是懶惰在前面我得到錯誤「使用未解析的標識符uiRealm」 –

+0

不用擔心!嗯,有沒有什麼理由不使用Realm()代替uiRealm? – TiM

+0

嗨,我通過聲明var方案來解決這個問題:結果!在頂部,然後在每個函數內初始化領域。我又一次嘗試做太多的全球食用,並將所有東西都轉化爲功能。 –