Migrationによる、Realmモデル構造の追加と削除
今あるrealmデータを保持したまま、マイグレーションでモデルの構造を変更したいのですが、方法がわかりません。
具体的には、RealmデータクラスのThreadData
内にある dynamic var aaaaa = ""
を構造から削除し、新たにdynamic var bbbbb = ""
を追加したいです。
そこで、下記の通り記述しましたが、エラー内容にあるように、aaaaa
は削除できておらず、bbbbb
は追加できていないようです。
さらに、別のrealmを利用している他のクラスのlet realm = try! Realm()
でEXC_BAD_INSTRUCTIONエラーとなります。
なお、今あるdefalut.realmを削除して再度生成した場合は、これらの構造変更は反映されています。
fatal error: 'try!' expression unexpectedly raised an error: Error Domain=io.realm Code=10 "Migration is required due to the following errors:
- Property 'aaaaa' is missing from latest object model.
- Property 'bbbbb' has been added to latest object model." UserInfo={NSLocalizedDescription=Migration is required due to the following errors:
- Property 'aaaaa' is missing from latest object model.
- Property 'bbbbb' has been added to latest object model., Error Code=10}: file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-703.0.18.8/src/swift/stdlib/public/core/ErrorType.swift, line 54
ThreadData
import Foundation
import RealmSwift
class ThreadData: Object {
//dynamic var aaaaa = ""
dynamic var bbbbb = ""
}
AppDelegate
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
// UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
let migrationBlock: MigrationBlock = { migration, oldSchemaVersion in
if oldSchemaVersion < 1 {
migration.enumerate(TeamData.className()) { oldObject, newObject in
if oldSchemaVersion < 1 {
}
}
}
if oldSchemaVersion < 3 {
migration.enumerate(ThreadData.className()) { oldObject, newObject in
newObject!["bbbbb"] as! String
let weaponID = oldObject!["aaaaa"] as! String
}
}
print("Migration complete.")
}
Realm.Configuration.defaultConfiguration = Realm.Configuration(schemaVersion: 4, migrationBlock: migrationBlock)
return true
}
NoUserView
import UIKit
import RealmSwift
class NoUserView: UIView, UITextViewDelegate, PlacePickerViewDelegate {
var finishUserRegisterButton : UIButton = UIButton()
//中略
let realm = try! Realm()//こちらでエラーが発生します。
let user = PersonalData()
override init(frame:CGRect) {
super.init(frame:frame)
//setupCustomView()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
//setupCustomView()
}