2014-11-08 1 views
0

Я пытаюсь получить доступ к значениям в моей структуре данных JSON, которые возвращаются из моего вызова API. Я хочу показать изображение shared, только если значение shared в моем JSON истинно, иначе отобразите другое изображение. В настоящее время, когда я запускаю приложение, первые два результата не отображают изображение, так как в базе данных значение false. Но когда я прокручиваю вниз и затем прокручиваю назад, они появляются. Я немного смущен, как использовать JSON для проверки условного. Я проверяю условие для каждой строки в правильном месте? Будет ли что-то вроде SwitfyJSON лучше всего подходит для доступа к моей вложенной структуре данных JSON?Swift and Alamofire - Доступ к значению JSON для условного оператора

class FactsTableViewController: UITableViewController, UISearchBarDelegate { 

var data = [AnyObject]() 
var id = String() 

func callAPI() { 

    let user = "user" 
    let pass = "pass" 
    let url = "https://example.com/api" 

    Alamofire.request(.GET, url, parameters: nil) 
     .authenticate(user: user, password: pass) 
     .responseJSON { (request, response, JSON, error) in 
      self.data = JSON! as [AnyObject] 
      self.tableView.reloadData() 
      self.cacheFacts() 
    } 
} 

override func tableView(tableView: UITableView?, cellForRowAtIndexPath indexPath: NSIndexPath?) -> UITableViewCell { 
    let cell = tableView!.dequeueReusableCellWithIdentifier("facts", forIndexPath: indexPath!) as FactTableViewCell 
    cell.factTitle.text = data[indexPath!.row]["preferredPhrase"] as? String 
    cell.factBody.text = data[indexPath!.row]["content"] as? String 

// If the value of teamShared is true show image, else show something different 

    if let shared = self.data[indexPath!.row]["shared"] as? Bool { 
     var isShared = UIImageView(frame: CGRectMake(10, 95, 15, 15)); // set as you want 
     var isSharedImage = UIImage(named: "team.png"); 
     isShared.image = isSharedImage; 
     cell.addSubview(isShared); 

// This always prints true even if the JSON is set to false. Can't figure out why this is? 

     println(shared) 
    } 

    return cell 
} 

}

+0

Если вы всегда печатаете правду, то почему вы не видите изображение с самого начала? – Shuo

ответ

0

Есть две проблемы, первая, вы используете кэшированные клетки, но не чистить их. Поэтому вы должны сделать уборку, прежде чем вернуть ее. 2nd, if let вернет true до тех пор, пока разворот преуспеет. Поэтому вы должны снова проверить значение.

Примечание: я не тестировал код, просто для демонстрации.

cell.viewWithTag(333)?.removeFromSuperview() // Find the tag and remove it. 
    if let shared = self.data[indexPath!.row]["shared"] as? Bool { 
     if shared { 
      var isShared = UIImageView(frame: CGRectMake(10, 95, 15, 15)); // set as you want 
      isShared.tag = 333 // Assign a tag to it 
      var isSharedImage = UIImage(named: "team.png"); 
      isShared.image = isSharedImage; 
      cell.addSubview(isShared); 
      println(shared) 
     } 
    } 
+0

Можете ли вы привести пример того, как это сделать? Я сделал некоторые поиски, и я не могу найти решение. Я думаю, что это должно быть документировано, если это общий шаблон? –