2016-06-22 2 views
1

Когда я запускаю этот код он работает нормально, но когда я запускаю его в dispatch_async он получает сообщение об ошибке в функции tableViews numberOfRowsInSectionмассив получает ноль НОД

dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) { 
    self.data = self.dataOfJson("http://192.168.1.100/practice/studentCourseSelection.php?ID=\(NSUserDefaults.standardUserDefaults().objectForKey("currentUser")!)") 
    self.RefreshTableView() 
} 

func RefreshTableView() 
{ 
    dispatch_async(dispatch_get_main_queue()){ 
     self.tableView.reloadData() 
    } 
} 
func dataOfJson(url:String) -> NSArray 
{ 
    var jsonArray : NSMutableArray = [] 

    let data = NSData(contentsOfURL: NSURL(string : url)!) 
    jsonArray = try! NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSMutableArray 



    return jsonArray 
} 

enter image description here

+0

Вы можете попробовать изменить 'return self.data.count', чтобы' return self.data.count ?? 0' –

+0

Показать ваш код! Что такое 'self.dataOfJson'? Как ваш код реализует 'numberOfRowsInSection' и два других Больших Вопроса? – matt

+0

, когда self.data равно нулю, вызывающий счетчик для nil вызывает EXC_BAD_INSTRUCTION RED ERROR. вы должны проверить, не так ли? – Cruz

ответ

2

Вы должны изменить self.data в главном потоке.

dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) { 
    let data = self.dataOfJson("http://192.168.1.100/practice/studentCourseSelection.php?ID=\(NSUserDefaults.standardUserDefaults().objectForKey("currentUser")!)") 
    self.RefreshTableView(data)  
} 

func RefreshTableView(data: ??) { 
    dispatch_async(dispatch_get_main_queue()){ 
     self.data = data 
     self.tableView.reloadData() 
    } 
} 
+0

все еще не работает:/ –

+0

спасибо, что это сработало .. Я внесла некоторые изменения .. Но спасибо большое –

Смежные вопросы