2015-03-05 2 views
-1

У меня есть массив словаря, созданный, как показано ниже:Использования Массива словаря для заполнения TableView в Swift

var menuItems = [["Image" : "bars_icon_main_page", "Title" : "Bars"], ["Image" : "clubs_icon_main_page", "Title" : "Clubs"]] 

Я создал пользовательский вид ячейку таблицы и заполнение вида ячейки таблицы, как показано ниже:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell: MenuTableViewCell = tableView.dequeueReusableCellWithIdentifier("MenuCell") as MenuTableViewCell 

    let dict = menuItems[indexPath.row] 
    cell.menuImage.image = UIImage(named: dict["Image"]!) 
    cell.menuTitle.text = dict["Title"] 

    return cell 
    } 

При отладке кода src после выполнения строки ниже «dict» равен нулю.

let dict = menuItems[indexPath.row] 

Я не могу разобраться, в чем проблема.

+0

ли сбой программы? Любые сообщения об ошибках? – alkku

+0

@alkku, поскольку значение dict равно нулю, а на следующей строке - его сбой. – Satyam

ответ

1

Следующая строка кода ищет ключ Image:

cell.menuImage.image = UIImage(named: dict["Image"]!) 

Но menuItems использует Image: в качестве ключа:

var menuItems = [["Image:" : "bars_icon_main_page", "Title" : "Bars"], ["Image:" : "clubs_icon_main_page", "Title" : "Clubs"]] 

Я подозреваю, что вы не намерены включить двоеточие в ключе:

var menuItems = [["Image" : "bars_icon_main_page", "Title" : "Bars"], ["Image" : "clubs_icon_main_page", "Title" : "Clubs"]] 
+0

Спасибо. Это опечатка. Я обновил свой вопрос. Но проблема заключается в строке «let dict = menuItems [indexPath.row]» – Satyam

+0

@Satyam Очевидно, учитывая то, что вы предоставили в своем вопросе, невозможно, чтобы 'dict' был' nil'. Возможно, что отладчик запутался (так программно «println» значение, не полагайтесь на отладчик). И 'println' три вещи: 1.' println (indexPath.row) '? 2. 'println (menuItems)' (чтобы убедиться, что что-то не изменило его или не испортило значения); и 3 'println (dict)'. – Rob

+0

indexPath.row - это печать 0 и 1. menuItems печатает весь массив. значение dict печатается как {} – Satyam

1

Ваш массив словаря реализуется с Image: ключа и код использует Image без : в ключевом

+0

Спасибо. Это опечатка. Я обновил свой вопрос. Проблема заключается в строке «let dict = menuItems [indexPath.row]» – Satyam

+0

Вы проверили, содержит ли indexPath.row в массиве? >> like 'if (menuItems.count> indexPath.row) {выполняйте свою логику ...}' – ViTUu

+0

@VictorCarvalhoTavernari Не должно ли это быть, если вы попытаетесь получить доступ за пределами диапазона массивов? – alkku

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