2015-12-14 39 views
8

我已經添加了新的數組屬性的RLMObject和斯威夫特域屬性「*」已經被添加到最新的對象模型遷移

public class Student: RLMObject { 
    dynamic var id = 0 
    dynamic var name = "" 
    dynamic var resultList = RLMArray(objectClassName:Result.className()) 
} 

public class Result: RLMObject { 
} 

錯誤日誌:

遷移所需的對象類型「學生'由於以下原因 錯誤: - 屬性'resultList'已被添加到最新的對象模型。

TRY失敗:

let configuration:RLMRealmConfiguration = RLMRealmConfiguration.defaultConfiguration() 

migration.enumerateObjects(Student.className()) { oldObject, newObject in 
    newObject!["resultList"] = RLMArray(objectClassName: Result.className()) 
} 

編輯:

let configuration:RLMRealmConfiguration = RLMRealmConfiguration.defaultConfiguration() 
    print("Realm db current version: \(configuration.schemaVersion)") 
    configuration.schemaVersion = 1 
    configuration.migrationBlock = {(migration:RLMMigration, oldSchemaVersion: UInt64) in 
     print("Realm db migration start") 
     if oldSchemaVersion < 1 { 
      print("Schema version: 1 - Rename fields") 
      migration.enumerateObjects(Student.className()) { oldObject, newObject in 
       newObject!["creationDate"] = oldObject!["createdAt"] 
       newObject!["modifiedDate"] = oldObject!["updatedAt"] 
      } 
     } 
     print("Realm db migration finish") 
    } 
    RLMRealmConfiguration.setDefaultConfiguration(configuration) 
    let realm = RLMRealm.defaultRealm() 

SOLUTION:

更新您的版本,以+1

configuration.schemaVersion += 1 
+0

你似乎使用相當老版本的Realm? – Shripada

+0

遷移對象來自哪裏?你對你的配置做了什麼改變嗎? – marius

+0

@marius更新了我的完整代碼 – AJit

回答

6

您必須增加您的schemaVersion並在您的RLMRealmConfiguration上提供migrationBlock。在那裏你可以遷移表格。但在這裏你並不需要你的具體情況。屬性的添加可以自動處理。你仍然需要一個空白塊。

let config = RLMRealmConfiguration.defaultConfiguration() 
config.schemaVersion = 1 
config.migrationBlock = { (migration, oldSchemaVersion) in 
    // nothing to do 
} 
RLMRealmConfiguration.setDefaultConfiguration(config) 
+1

感謝@marius,編輯了我的完整代碼..你能指點我虛假嗎? – AJit

+0

請注意,儘管下一個模式更改僅僅將schemaVersion增加1是不夠的。它必須高於數據庫中存儲的版本,因此存儲絕對編號可能有意義。 – marius

+0

如果您仍在開發中,您可能需要重置模擬器的內容和設置,而不是從您的應用程序中刪除應用程序,並從頭開始。如果您只需擔心實際部署的模式版本之間的遷移,它將使它變得更加容易。 – marius