我正在尝试在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 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() }
我看到输出被打印到控制台,所以我知道登录尝试是成功的.我不认为这是一个不匹配的数据库的问题,因为我将deleteRealmIfMigrationNeeded标志设置为true.
可以在此处找到相应的Object Realm Server日志: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 = "" }
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; }
提前致谢!
解决方法
弄清楚发生了什么.显然,根据定义,Java String可以为空(或者如果你愿意,可以是可选的).在Swift中,我告诉我的模型映射到非可选字符串.这就是为什么错误消息说它无法断言left.optional == right.optional.
所以,我必须做的就是让我的swift模型中的每个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? }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。