2016-11-08 37 views
5

Verilerimi iOS Uygulamam ile Android uygulaması arasında senkronize etmeye çalışıyorum. Android uygulaması Realm'den iyi bir şekilde okuyabilir, ancak Swift programım mücadele ediyor ve hata mesajı çok bilgilendirici değil. Ne anlama geldiğini hiçbir fikriRealm nesne sunucusu: başarısız oldu. Sol.optional == right.optional (Android ve iOS arasında veri senkronizasyonu)

2016-11-08 08:53:43.919 iOSRealm[2629:65667] Sync: Connection[1]: Session[1]: Bad changeset received: Assertion failed: left().nullable == right().nullable 

var ya nasıl düzeltilir:

Bu hata mesajı alıyorum. Bu benim Diyar Nesne sunucusuyla kendimi kimlik doğrulaması nasıl:

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() 
} 

ben giriş denemesinin başarılı olduğunu bilmeleri çıktı konsola basılmış görüyoruz. Eşleşmeyen bir veritabanıyla ilgili bir sorun olduğunu düşünmüyorum, çünkü deleteRealmIfMigrationNeeded bayrağını true olarak ayarlıyorum.

Bu hata mesajı ne anlama geliyor ve nasıl düzeltebilirim?

Uygun Nesne Bölge Sunucusu günlüklerini şu adreste bulabilirsiniz: http://pastebin.com/raw/J9mU4H0u - site dışı bağlantıdan özür dilerim, ancak uzun bir günlük dosyası. aşağıdaki gibi

Benim Swift modelleri

şunlardır:

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 Modeller: önceden

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; 
} 

teşekkürler!

cevap

6

Neler olup bittiğini anladı. Açıkça, Java String tanım gereği null (veya isterseniz Optional). Swift'de, modelimin Optional dizeleriyle eşleşmesini söylüyordum. Bu yüzden hata mesajı, left.optional == right.optional olduğunu iddia etmediğini söyledi.

Bu nedenle, düzeltmek için ne yapmam gerekiyorsa, her String hızlı modelim optional modelinde yapıldı.

Buraya bakın:

class Weather : Object { 
    dynamic var id = 0 
    dynamic var date: String? 
    dynamic var forecast: String? 
    dynamic var humidity: String? 
    dynamic var wind: Wind? 

    override class func primaryKey() -> String? { 
     return "id" 
    } 
} 

class Wind: Object { 
    dynamic var direction: String? 
    dynamic var speed: String? 
} 
+0

Güzel bulundu! Bunu, Realm Mobil Platformu ile çapraz uyumluluk konusundaki iç tartışmalarımızda vurguladım ve bunu gelecekte daha açık hale getirmeye çalışacağız. Paylaşım için teşekkürler! :) – TiM