Мне нужно выполнить миграцию для моего Other Realm
.Realm.io RealmSwift Миграция других сфер
Я получаю свой путь через этот метод (AppDelegate
). Если пользователь вошел в систему раньше, я заберу область пользователя, иначе я просто воспользуюсь Default Realm
.
func getRealmPath() -> String {
let preferences : NSUserDefaults = NSUserDefaults()
let username = preferences.objectForKey(usernameKey) as! String?
if username != nil {
let realmName = ("\(username!).realm")
print("RealmName: \(realmName)", terminator: "")
let documents = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
return documents.stringByAppendingPathComponent(realmName)
}else{
return Realm.Configuration.defaultConfiguration.path!
}
}
Я сделал свою миграцию через этот метод (так называемый внутри AppDelegate:didFinishLaunchingWithOptions
).
func updateRealm(){
let config = Realm.Configuration(path: getRealmPath(), schemaVersion: 2, migrationBlock: { (migration, oldSchemaVersion) -> Void in
print("oldSchemaVersion \(oldSchemaVersion)")
migration.create("RLMStringTimestamp", value: ["pKey": NSUUID().UUIDString, "value": "", "updatedAt": NSDate(), "createdAt": NSDate(), "deletedAt": Date().getInitDate(), "updatedBy" : " ", "syncedAt": NSDate() ])
if oldSchemaVersion < 2 {
//MIGRATION
let firstNameTimeStamp = RLMStringTimestamp(newValue: oldObject!["firstName"] as? String)
migration.create("RLMStringTimestamp", value: firstNameTimeStamp)
newObject!["firstName"] = firstNameTimeStamp
}
}
Realm.Configuration.defaultConfiguration = config
//EDIT 2
Realm.Configuration.defaultConfiguration.path = getRealmPath()
//EDIT 1
//<strike>let realm = try! Realm(path: getRealmPath())</strike>
//EDIT 4
print(Realm.Configuration.defaultConfiguration)
//EDIT 3
let realm = try! Realm()
}
For my RLMCustomer Object, i modified
var firstName: String = ""
tovar firstName: RLMStringTimeStamp!
Даже если я изменить
schemaVersion
к чему-то очень высоко,
migrationBlock
не получил колл. Может ли кто-нибудь помочь мне определить, что мне не хватает или что-то не так?
После запуска приложения, она падает с bad excess, code = 257
EDIT 1:
error: 'try!' expression unexpectedly raised an error: Error Domain=io.realm Code=0 "Provided schema version 0 is less than last set version 1." UserInfo=0x170660c00 {NSLocalizedDescription=Provided schema version 0 is less than last set version 1.}: file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-700.0.59/src/swift/stdlib/public/core/ErrorType.swift, line 50
кажется, что читает неправильный файл конфигурации, и я подозреваю, что ошибка происходит из-за
Realm.Configuration.defaultConfiguration = config
Как я установить конфигурацию для
Other Realm
?
EDIT 2:
I make my
default realm
to contains the name and path of myother realm
EDIT 4:
кажется, что конфигурационный файл правильно. Я могу запустить приложение без проблем, если нет записи клиента из старой области. Это произойдет только в случае записи клиента в старой области. Я могу получить значения из oldObject["firstName"]
print(Realm.Configuration.defaultConfiguration)
Realm.Configuration { path = /var/mobile/Containers/Data/Application/8670C084-75E7-4955-89FB-137620C9B00D/Documents/perwyl.realm; inMemoryIdentifier = (null); encryptionKey = (null); readOnly = 0; schemaVersion = 2; migrationBlock = <NSMallocBlock: 0x170451220>; dynamic = 0; customSchema = (null); } oldSchemaVersion 0
Большое спасибо !!!
EDIT 5: Решение моей проблемы
I'm not sure why it crashes if i assign
StringTimestamp object
directly to newObject.
let firstName = (oldObject!["firstName"] as? String)!
let firstNameTimeStamp = StringTimestamp(newValue: firstName)
let testName = migration.create("StringTimestamp",value: firstNameTimeStamp)
newObject!["firstName"] = firstNameTimeStamp //Crashes
newObject!["firstName"] = testName //works
Спасибо за принципы каждого! :)
Перемещения вызываются при открытии файла, который происходит в вашем случае, как только вы извлекаете область по умолчанию. Не могли бы вы показать код, как вы это делаете? – marius
Какая ошибка возникает при попытке создать _realm_? – Edman
@ Edman Я редактировал свой qn. PLS посмотреть – perwyl