2016-11-08 19 views
5

left.optional == right.optional(AndroidとiOSの間での同期データ)をアサートに失敗しました。 AndroidアプリケーションはRealmからうまく読み込めますが、私のSwiftプログラムは苦労しています。エラーメッセージはあまり有益ではありません。私はそれが何を意味するのか全くわからレルム・オブジェクト・サーバは:私は私のiOSアプリケーションとAndroidアプリケーション間でデータを同期しようとしています

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

私は、ログインが成功した知っているので、出力はコンソールに表示されている参照してください。 フラグをtrueに設定しているため、データベースが一致していないと問題はないと思います。

このエラーメッセージは何を意味し、私はそれをどのように修正するのですか?

適切なObject Realm Serverのログは、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 = "" 
} 

アンドロイドモデル:事前に

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と主張して失敗したと言っています。

それで、私が修正するためにやらなければならなかったのは、Stringを私の素早いモデルoptionalに入れたことです。

はこちらをご覧ください:

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

関連する問題