goldbest
@goldbest
Full Stack Web Developer

Не изменяется переменная, не получает данные или еще что?

Ребята, вот кусок кода:
var nubmerOfRows = 0
    var namesArray = [String]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        var titleView : UIImageView
        titleView = UIImageView(frame:CGRectMake(0, 0, 10, 30))
        titleView.contentMode = .ScaleAspectFit
        titleView.image = UIImage(named: "title_logo")
        
        self.Navigator.titleView = titleView
        
        parseJSON(url)
        
    }
    
    func parseJSON (urlToRequest: String) {
        let request = HTTPTask()
        var attempted = false
        request.auth = {(challenge: NSURLAuthenticationChallenge) in
            if !attempted {
                attempted = true
                return NSURLCredential(user: self.usr, password: self.pswd, persistence: .ForSession)
            }
            return nil //auth failed, nil causes the request to be properly cancelled.
        }
        request.GET(urlToRequest, parameters: nil, completionHandler: {(response: HTTPResponse) in
            if let err = response.error {
                NSLog("error: \(err.localizedDescription)")
                return //also notify app of failure as needed
            }
            if let data = response.responseObject as? NSData {
                let readableJSON = JSON(data: data, options: NSJSONReadingOptions.MutableContainers, error: nil)
                
                self.nubmerOfRows = readableJSON["result"].count - 1
                
                if (self.nubmerOfRows > 0) {
                    for i in 0...self.nubmerOfRows {
                        let cat_name = readableJSON["result"][i]["name"].string!
                        self.namesArray.append(cat_name)
                    }
                }
            }
        })
        
    }
    
    
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return nubmerOfRows
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
        if namesArray.count != 0 {
            cell.textLabel?.text = namesArray[indexPath.row]
        }
        return cell
    }


Почему namesArray получает данные внутри функции, но внешне ничего в ней не остается? Код работает хорошо, идет заход на сайт, авторизация, получение json его парсинг и в цикле сбор этой переменной в виде массива. А вот в таблице на айфоне строк нет и переменная только в этом месте набирает строки:
if (self.nubmerOfRows > 0) {
                    for i in 0...self.nubmerOfRows {
                        let cat_name = readableJSON["result"][i]["name"].string!
                        self.namesArray.append(cat_name)
                    }
                }

А вот эта часть:
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return nubmerOfRows
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
        if namesArray.count != 0 {
            cell.textLabel?.text = namesArray[indexPath.row]
        }
        return cell
    }

не срабатывает, потому что пустые nubmerOfRows и namesArray.
Кто что подскажет?
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
@ifau
После цикла for сделайте
dispatch_async(dispatch_get_main_queue()) {
  self.tableView.reloadData()
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы