2016-03-28 3 views
12

Я хочу показать 25 песен, которые у меня есть в моей библиотеке. Это мой код:Неустранимая ошибка: Индекс за пределами допустимого диапазона

var allSongsArray: [MPMediaItem] = [] 
let songsQuery = MPMediaQuery.songsQuery() 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 25 //allSongsArray.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell") 
    let items = allSongsArray[indexPath.row] 
    cell?.textLabel?.text = items.title 
    cell?.detailTextLabel?.text = items.artist 
    cell?.imageView?.image = items.artwork?.imageWithSize(imageSize) 

    return cell! 
} 

Когда я запускаю это, он выходит из строя, потому что:

fatal error: Index out of range

Я попытался изменить numberOfRowsInSection к allSongsArray.count, но он заканчивается с той же ошибкой.

+1

Вы должны обязательно вернуться 'allSongsArray.count', а не буквальное числа; перед выполнением запроса массив будет содержать 0 элементов. Какой индекс вы пытаетесь получить, когда возникает исключение? – Paulw11

+0

Это, безусловно, будет сбой с 25 жестко закодированными, как количество строк, так как ваш массив объявлен пустым. Я сомневаюсь, что он сработает с 'allSongsArray.count', но он ничего не покажет ... – Grimxn

+0

О да, вы правы. Он ничего не показывает. Как я могу показать 25 песен? @Grimxn –

ответ

12

Вы должны вернуть allSongsArray.count и избежать возвращаемые пустые клетки используют yourTableView.reloadData после заполнения вашего allSongsArray.

2

Когда вы впервые создаете массив, он пуст. Следовательно, это даст вам ошибку.

Попробуйте вместо этого вернуть количество массивов песен.

1-й вам нужно получить данные в массиве, а затем обновить представление таблицы.

Вот пример кода:

@IBAction private func refresh(sender: UIRefreshControl?) { 
     if myArray.count > 0 { 
       self.tableView.reloadData() 
       sender?.endRefreshing() 
     } else { 
       sender?.endRefreshing() 
     } 
    } 
+0

Я попытался, но тогда ячейки пустые. Как я могу заполнить ячейки моими песнями? –

+0

сначала вам нужна функция для заполнения массива композиций. и вам нужно добавить способность обновления к классу. в действии обновления просто обновите таблицу, используя tableView.reloadData() –

+0

, проверьте приведенный выше код. Обратите внимание, что вы можете добавить возможность обновления с раскадровки –

0

Пожалуйста, вернитесь рассчитывать фактический массив вместо статического

return allsongsarray.count 
Смежные вопросы