2016-11-08 29 views
5

我想在我的iOS應用程序和Android應用程序之間同步數據。 Android應用程序可以很好地從Realm中讀取,但是我的Swift程序正在掙扎,並且錯誤消息沒有很多信息。領域對象服務器:失敗asserting left.optional == right.optional(Android和iOS之間的同步數據)

我收到此錯誤信息:

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

我不知道這意味着什麼或如何解決它。 這就是我如何與境界對象服務器進行身份驗證自己:

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

我看到正在打印輸出到控制檯,所以我知道的登錄嘗試是成功的。我不認爲這是不匹配的數據庫的問題,因爲我將deleteRealmIfMigrationNeeded標誌設置爲true

這個錯誤信息是什麼意思,我該如何解決?

適當的對象領域服務器日誌可以在這裏找到:http://pastebin.com/raw/J9mU4H0u - 我非常抱歉的離線鏈接,但它是一個很長的日誌文件。

我的雨燕車型如下:

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機型:提前

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

謝謝!

回答

6

找出發生了什麼。根據定義,Java String可以爲空(或者Optional,如果需要)。在Swift中,我告訴我的模型映射到非Optional字符串。這就是爲什麼錯誤消息說它失敗,斷言left.optional == right.optional

所以,我需要做的是解決這個問題,讓我的快速模型optional中的每個String)。

在這裏看到:

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

奈斯利找到了!我在關於與Realm Mobile Platform交叉兼容性的內部討論中強調了這一點,我們將在未來嘗試使這一點更加明顯。感謝分享! :) – TiM

相關問題