Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 服务器中数据库的领域更新结果_Ios_Swift_Realm - Fatal编程技术网

Ios 服务器中数据库的领域更新结果

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

我想用json api同步我的数据,但当我第二次发出请求(我在服务器端编辑数据)时,ream中的数据仍然很旧,有没有办法同步服务器和领域数据库

我的谢玛王国:

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