
我创建了名为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访问的域所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)