我正在尝试在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
Run Code Online (Sandbox Code Playgroud)
我不知道它意味着什么或如何解决它.这是我使用Realm Object服务器验证自己的方式:
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()
}
Run Code Online (Sandbox Code Playgroud)
我看到输出被打印到控制台,所以我知道登录尝试是成功的.我不认为这是一个不匹配的数据库的问题,因为我将deleteRealmIfMigrationNeeded标志设置为true.
此错误消息的含义是什么?如何解决?
可以在此处找到相应的对象领域服务器日志: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 = ""
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
弄清楚发生了什么.显然,根据定义,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?
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |