2015-07-02 27 views
8

Benim bölge şemasını yeni sürüme taşımak istiyorum. Bunun için birincil anahtarımın kaldırılması gerekiyor.Realm birincil anahtar geçişi

Eski şema:

class StudyState : Object 
{ 
    dynamic var name = "" 
    dynamic var x = "" 
    dynamic var y = "" 

    override static func primaryKey() -> String? { 
    return "name" 
    } 
} 

Yeni şema:

class StudyState : Object 
{ 
    dynamic var name = "" 
    dynamic var x = "" 
    dynamic var y = "" 
} 

göç ​​ olmadan, bölge

'RLMException', nedeni ile başarısız olur: 'Göç için gereklidir Aşağıdaki hatalardan dolayı 'StudyState' nesne türü: - Prop erty 'name' artık birincil anahtar değil.

ben de başarısız bu göç ​​bloğu, denedik:

migration.enumerate(StudyState.className()) { oldObject, newObject in 
    newObject?["deleted"] = false 
    newObject?["primaryKeyProperty"] = "" 
} 

'RLMException', nedeni: 'Geçersiz özellik adı'

kaldırmak için bir yol var mı Yeni bir şema sürümüne geçiş yaparken birincil anahtar mı?

cevap

6

Sadece birincil anahtar açıklamasını kaldırırsanız, geçiş bloğunda bir şey yapmanıza gerek yoktur. Ancak şema sürümünün değiştirilmesi gerektiğinden şema sürümünün artırılması gerekiyor.

altındaki Beğen:

// You have to migrate Realm BEFORE open Realm if you changed schema definitions 
setSchemaVersion(1, Realm.defaultPath) { (migration, oldSchemaVersion) -> Void in 
    if oldSchemaVersion < 1 { 
     // Nothing to do! 
     // Realm will automatically detect new properties and removed properties 
     // And will update the schema on disk automatically 
    } 
} 

let realm = Realm() 
... 
+0

ama burada "setSchemaVersion" dan mı? – User9527

+0

@ User9527 Bu cevap çok eski versiyon içindir. En son sürümde, bunun yerine şema sürümünü belirtmek için 'Realm.Configuration' kullanabilirsiniz. Ayrıca bkz. Https://realm.io/docs/swift/latest/#migrations –

İlgili konular