2017-08-23 8 views
0

私はレルムデータベースオブジェクトを持っている古い修正レルムデータベース移行、新しいオブジェクトを追加し、クラスで定義されているよう

class TPDailyRashifal: Object, Mappable { 

    public required convenience init?(map: Map) { 
     self.init() 
     mapping(map: map) 
    } 

    dynamic var rashi: String = "" 
    dynamic var rashiDetail: String = "" 

    public func mapping(map: Map) { 
     rashi  <- map["rashi"] 
     rashiDetail <- map["rashifal"] 
    } 
    override static func primaryKey() -> String { 
     return "rashi" 
    } 
} 

dynamic var date: String = "" 
dynamic var fallIds: String = "" 
dynamic var rating: Int = 0 
を次のように私は私のオブジェクトでこれらの三つの変数を追加したいと思います

私のマッピング機能が変更され、以下を追加する必要があることは知っています。

date  <- map["date"] 
    fallIds  <- map["fallIds"] 
    rating  <- map["rating"] 

しかし、私の

dynamic var rashi: String = "" 

定義は、私は混乱しています

Realm.Configuration.defaultConfiguration = Realm.Configuration(
     schemaVersion: 1, 
     migrationBlock: { migration, oldSchemaVersion in 
      if (oldSchemaVersion < 1) { 
       print("Schema Version 0") 
       // The enumerateObjects(ofType:_:) method iterates 
       // over every Person object stored in the Realm file 
       migration.enumerateObjects(ofType: TPDailyRashifal.className()) { oldObject, newObject in 
        // combine name fields into a single field 
        /* 
        To add these variables during migration 
        dynamic var date: String = "" 
        dynamic var fallIds: String = "" 
        dynamic var rating: Int = 0 
        */ 
        let oldRashi = oldObject?["id"] as? Int 
       // let newRashiId = 


       } 
      } 
    }) 

を書かれている私の AppdelegateapplicationDidFinishLaunchingWithOptions機能で

dynamic var rashi: Int = 0 

に変更する必要がありますdを指定して、Realmオブジェクトに新しい変数を追加する場所を指定します。私は他の質問に言及しましたが、私は彼らに追いつくことができませんでした。

答えて

0

部分的には正しいと思いましたが、ここではいくつかの研究が必要でした。

Realm.Configuration.defaultConfiguration = Realm.Configuration(
     schemaVersion: 1, 
     migrationBlock: { migration, oldSchemaVersion in 
      if (oldSchemaVersion < 1) { 
       print("Schema Version 0") 
       // The enumerateObjects(ofType:_:) method iterates 
       // over every Person object stored in the Realm file 
       migration.enumerateObjects(ofType: TPDailyRashifal.className()) { oldObject, newObject in 
        // combine name fields into a single field 

        newObject!["date"] = "" 
        newObject!["fallIds"] = "" 
        newObject!["rating"] = 0 
         newObject!["rashi2"] = 0 
       } 
       migration.renameProperty(onType: TPDailyRashifal.className(), from: "rashi", to: "rashi2") 

      } 
    }) 

私はrashi2rashiの名前を変更するmigration.renamePropertyブロックを使用する必要がありました。

0

"rashi"の名前を変更する必要があると思います(新しいIntが下の例では "rashi2"と仮定します)。古い文字列を取得するために、このクロージャの中、あなたは[「らしさ」] oldObjectを使用して行うことができます文字列から整数変換によってrashi2に古いらしさを変換する必要がある場合

migration.enumerateObjects(ofType: TPDailyRashifal.className()) { oldObject, newObject in 
    newObject!["date"] = "" 
    newObject!["fallIds"] = "" 
    newObject!["rating"] = 0 
    newObject!["rashi2"] = 0 // this version has a rashi2 (Int) instead of a rashi (String). 
} 

また、注意してくださいそれを変換してrashi2を0ではなく0に設定してください。

+0

私に確認させてください! – amagain

関連する問題