ios – Realm.io – 从不正确的线程swift访问的域

ios – Realm.io – 从不正确的线程swift访问的域,第1张

概述我想从我的.json文件下载城市(name,id,lon,lat)到Realm数据库. 我创建了名为City的Realm对象,但它崩溃时出现以下错误: Terminating app due to uncaught exception 'RLMException', reason: 'Realm accessed from incorrect thread'** 所以,我只想在我的self.cit 我想从我的.Json文件下载城市(name,ID,lon,lat)到Realm数据库.

我创建了名为City的Realm对象,但它崩溃时出现以下错误:

Terminating app due to uncaught exception 'RLMException',reason: 'Realm accessed from incorrect thread'**

所以,我只想在我的self.citIEs([City])数组中获得一个Realm对象.然后把它放在表格视图中.

我的刷新功能:

func refresh(sender:AnyObject){        var service = CityService()        service.getCitIEs {            (response) in            if(response.count > 0){                if(response["citIEs"] != nil){                    self.citIEsstore.loadCitIEs(response["citIEs"]! as NSArray,tableVIEw: self.tableVIEw)                    self.tableVIEw.reloadData()                } else {                    println("No response data")                }            }}

服务:

class CityService {var getCityUrl = "http://test:8888/citIEs.Json";func getCitIEs(callback:(NSDictionary)->()) {    get(getCityUrl,callback:callback)}func get(url:String,callback:(NSDictionary) -> ()){    var nsURL = NSURL(string: url)    UIApplication.sharedApplication().networkActivityIndicatorVisible = true    let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL!) {        (data,response,error) in        var error: NSError?        UIApplication.sharedApplication().networkActivityIndicatorVisible = false        if(error == nil){            if(response != nil){                var response = NSJsONSerialization.JsONObjectWithData(data,options: NSJsONReadingOptions.MutableContainers,error: &error) as NSDictionary                callback(response)            } else {                callback(NSDictionary())            }        }    }    task.resume()}

}

和loadCitIEs功能

func loadCitIEs(citIEsJson:NSArray,tableVIEw: UItableVIEw) {    var realmQueue = dispatch_queue_create("db",disPATCH_QUEUE_SERIAL)    let priority = disPATCH_QUEUE_PRIORITY_DEFAulT    dispatch_async(realmQueue) {        println("start")        var cc:[City] = []        var realm = RLMRealm.defaultRealm()        realm.beginWriteTransaction()        for object in citIEsJson {            City.createOrUpdateInRealm(realm,withObject: object)        }        realm.commitWriteTransaction()        let citIEsFromrealm = City.allObjects()        for object in citIEsFromrealm {            let cityObject = object as City            //println(cityObject.name)  <-- here ok            cc.append(cityObject)        }        println("point")        dispatch_async(dispatch_get_main_queue()) {            println("ok")            self.citIEs.removeAll(keepCapacity: false)            self.citIEs = cc            println(self.citIEs[3].name) // <--- Here an error            tableVIEw.reloadData()        }    }}
解决方法 例外是告诉你到底发生了什么 – 一个RLMRealm实例(以及从它获得的所有对象)仅在单个线程上有效.每次调度到一个单独的队列时,您都需要创建一个新的RLMRealm实例,并在访问任何属性或启动新的写入事务之前重新获取RLMObjects. 总结

以上是内存溢出为你收集整理的ios – Realm.io – 从不正确的线程swift访问的域全部内容,希望文章能够帮你解决ios – Realm.io – 从不正确的线程swift访问的域所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1097150.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存