2016-03-17 2 views
0

Я создаю приложение для социальных сетей с бэкэндом NodeJS. Приложение получает свои данные от MongoDB, связанного с приложением Node, с запросом GET. Я выяснил, как разбирать JSON, возвращенный из запроса GET, в качестве родного словаря, но не может найти чистый способ превратить каждый из объектов в словаре в TableViewCell в моем TableView. Словарь в основном это:Настраивать UITableView с данными словаря (Swift)

["username":"personWhoPosted", "taggedUsername":"personWhoIsTagged", "imageURL":"http://urlofimageposted.com"] 

мне нужно каждый из них, чтобы заполнить различные значения/метки внутри TableViewCell s

+0

Вы можете просто перебрать словарь и установить каждое значение пары (ключ, значение) на метку в ячейке просмотра таблицы? –

ответ

1

Если вы хотите использовать indexPath, я хотел бы сохранить копию массива ключей словаря.

func fetchData() { 
    // .... 
    // Your own method to get the dictionary from json 
    let self.userDict = ["username":"personWhoPosted", "taggedUsername":"personWhoIsTagged", "imageURL":"http://urlofimageposted.com"] 

    // Keep a copy of dictionary key 
    let self.userDictKeyCopy = Array(self.userDict.keys) 
    // You may want to sort it 
    self.userDictKeyCopy.sort({$0 < $1}) 
} 

// Table view delegates 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return self.userDictKeyCopy.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier(kCustomCell) as! CustomTableCell 

    // Assuming one section only 
    let title = self.userDictKeyCopy[indexPath.row] // e.g. "taggedUsername" 

    cell.titleLabel = title 
    cell.contentLabel = self.userDict[title] // e.g. "personWhoIsTagged" 

    return cell 
} 
+0

Что делать, если JSON похож на [{«имя пользователя»: «personWhoPosted», «taggedUsername»: «personWhoIsTagged», «imageURL»: «http://urlofimageposted.com»}, {«имя пользователя»: «personWhoPosted», «taggedUsername»: «personWhoIsTagged», «imageURL»: «http://urlofimageposted.com»}] и внутри есть несколько наборов объектов? Внутренние содержат данные для каждого сообщения. –

+0

Вам нужно решить, что вы хотите сделать. Например, вы можете иметь несколько разделов представления таблиц, где каждый раздел соответствует одному сообщению. Для таких вещей лучше всего направить три словарных словаря на константную строку указательного пути. Например. 'if indexPath.row == 0 {cell. contentLabel = userDict ['username']} else if indexPath.row == 1 {...} '. Или вы можете создать пользовательскую ячейку, в которой будут отображаться все три поля, чтобы не было задействовано несколько разделов. – zcui93