Próbuję przeprowadzić synchronizację danych między aplikacją iOS a aplikacją na Androida. Aplikacja dla systemu Android może odczytywać z obszaru Realm, ale mój program Swift ma problemy, a komunikat o błędzie nie jest zbyt pouczający.Serwer obiektów Realm: nie powiodło się twierdzenie left.optional == right.optional (dane synchronizacji między systemem Android i iOS)
otrzymuję komunikat o błędzie:
2016-11-08 08:53:43.919 iOSRealm[2629:65667] Sync: Connection[1]: Session[1]: Bad changeset received: Assertion failed: left().nullable == right().nullable
Nie mam pojęcia, co to znaczy i jak to naprawić. To jak ja uwierzytelnić się z serwerem Realm obiektu:
private func synchronouslyLogInUser() throws {
SyncUser.authenticateWithCredential(Credential.usernamePassword(username, password: password, actions:.UseExistingAccount), authServerURL: authURL) { (user, error) in
print("sent login request")
if let user = user {
print("user was not nil")
self.setDefaultRealmConfiguration(user)
}
if let error = error where error.code == SyncError.HTTPStatusCodeError.rawValue && (error.userInfo["statusCode"] as? Int) == 400 {
print("invalid user and pass")
} else {
print(error)
}
}
}
private func setDefaultRealmConfiguration(user: SyncUser) {
Realm.Configuration.defaultConfiguration = Realm.Configuration(syncConfiguration: (user, realmURL), objectTypes: [Weather.self, Wind.self])
Realm.Configuration.defaultConfiguration.deleteRealmIfMigrationNeeded = true
realm = try! Realm()
}
widzę wyjście jest wypisywane na konsoli więc wiem próba logowanie było udane. Nie sądzę, że jest to problem z niedopasowaną bazą danych, ponieważ ustawiam flagę deleteRealmIfMigrationNeeded
na true
.
Co oznacza ten komunikat o błędzie i jak go naprawić?
Odpowiednie dzienniki serwera obiektów nieruchomych można znaleźć tutaj: http://pastebin.com/raw/J9mU4H0u - przepraszam za link poza witryną, ale jest to długi plik dziennika.
Kim Swift modeli są następujące:
class Weather : Object {
dynamic var id = 0
dynamic var date = ""
dynamic var forecast = ""
dynamic var humidity = ""
dynamic var wind: Wind!
override class func primaryKey() -> String? {
return "id"
}
}
class Wind: Object {
dynamic var direction = ""
dynamic var speed = ""
}
Android modele:
public class Weather extends RealmObject {
@PrimaryKey
public int id;
public String date;
public String forecast;
public String humidity;
public Wind wind;
}
public class Wind extends RealmObject {
public String direction;
public String speed;
}
Z góry dzięki!
Ładnie znaleziony! Podkreśliłem to w naszych wewnętrznych dyskusjach dotyczących kompatybilności krzyżowej z Realm Mobile Platform, a postaramy się uczynić to bardziej oczywistym w przyszłości. Dzięki za udostępnienie! :) – TiM