Ios 服务器中数据库的领域更新结果
我想用json api同步我的数据,但当我第二次发出请求(我在服务器端编辑数据)时,ream中的数据仍然很旧,有没有办法同步服务器和领域数据库 我的谢玛王国:Ios 服务器中数据库的领域更新结果,ios,swift,realm,Ios,Swift,Realm,我想用json api同步我的数据,但当我第二次发出请求(我在服务器端编辑数据)时,ream中的数据仍然很旧,有没有办法同步服务器和领域数据库 我的谢玛王国: class testObject: Object { dynamic var id: Int = 0 dynamic var name: String = "" dynamic var url: String = "" override static func primaryKey() ->
class testObject: Object {
dynamic var id: Int = 0
dynamic var name: String = ""
dynamic var url: String = ""
override static func primaryKey() -> String? {
return "id"
}
}
请求:
func request() {
let url = NSURL(string: "http://localhost:3000/products.json")
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) { (data, response, error) in
if error != nil {
print("error != nil")
print(error)
} else {
var jsonData = try! NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSArray
// Crashes on this line
do {
let realm = try Realm()
try! realm.write({ () -> Void in
for info in jsonData {
let user = Mapper<testObject>().toJSON
realm.create(testObject.self, value: info, update: true)
}
})
} catch let error as NSError {
print(error)
}
}
}
task.resume()
}
通知令牌:
这看起来像是您触发了一个异步网络请求,并同时加载了
UITableViewController
。因此,在您尝试渲染结果时,新数据似乎尚未加载
要实现这一点,您可以在域上侦听写通知
var notificationToken: NotificationToken?
override func viewDidLoad() {
super.viewDidLoad()
let realm = try! Realm()
self.datasource = realm.objects(testObject) // is auto-updated
notificationToken = realm.addNotificationBlock { note, realm in
self.myTableView.reloadData()
}
}
deinit {
if let notificationToken = notificationToken {
let realm = try! Realm()
realm.removeNotification(notificationToken)
}
}
您是否验证了服务器返回的对象具有相同的
id
?目前,我正在尝试删除一个项目,并希望查看更新的TableView。我刚才看到您在jsonData
上注意到一个崩溃,但您的问题对我来说并不十分明显。这就是你的问题吗?如果是这样的话,你能详细说明一下并显示堆栈跟踪吗?@marius更新的问题@БіаааМаа:你能分享一下你的tableView(UITableView,numberOfRowsInSection:Int)
方法的实现吗?事实上没有任何变化,如果我不调用自己的函数reloadMyTable()的话,我在numberOfRowsInSection中得到零
var notificationToken: NotificationToken?
override func viewDidLoad() {
super.viewDidLoad()
let realm = try! Realm()
self.datasource = realm.objects(testObject) // is auto-updated
notificationToken = realm.addNotificationBlock { note, realm in
self.myTableView.reloadData()
}
}
deinit {
if let notificationToken = notificationToken {
let realm = try! Realm()
realm.removeNotification(notificationToken)
}
}