我正在尝试在我的 iOS 应用程序和 Android 应用程序之间同步数据。 Android 应用程序可以很好地从 Realm 中读取数据,但我的 Swift 程序很吃力,而且错误消息的信息量不是很大。
我收到此错误消息:
2016-11-08 08:53:43.919 iOSRealm[2629:65667] Sync: Connection[1]: Session[1]: Bad changeset received: Assertion failed: left().nullable == right().nullable
我不知道这意味着什么或如何修复它。 这就是我使用 Realm 对象服务器验证自己的方式:
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
。
此错误消息是什么意思,我该如何解决?
可在此处找到适当的对象 Realm 服务器日志:http://pastebin.com/raw/J9mU4H0u - 对于站外链接,我深表歉意,但这是一个很长的日志文件。
我的 Swift 模型如下:
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;
}
提前致谢!
最佳答案
弄清楚发生了什么。显然,根据定义,Java String
是可以为空的(如果您愿意,也可以是 Optional
)。在 Swift 中,我告诉我的模型映射到非 Optional
字符串。这就是为什么错误消息说它未能断言 left.optional == right.optional
。
因此,我必须做的是让我的 swift 模型中的每个 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?
}
关于swift - Realm 对象服务器 : failed asserting left. optional == right.optional(在 Android 和 iOS 之间同步数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40492585/