2016-03-28 34 views
12

Voglio mostrare 25 delle canzoni che ho nella mia libreria. Questo è il mio codice:errore fatale: indice fuori intervallo

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! 
} 

Quando ho eseguito questo, si blocca, perché:

fatal error: Index out of range

Ho provato a cambiare il numberOfRowsInSection-allSongsArray.count, ma finisce con lo stesso errore.

+1

Si dovrebbe tornare 'allSongsArray.count' piuttosto che un numero letterale; prima che la query sia eseguita, la matrice conterrà 0 elementi. Quale indice stai cercando di accedere quando si verifica l'eccezione? – Paulw11

+0

Arresterà sicuramente con 25 hard-coded come numero di righe, poiché l'array è dichiarato vuoto. Dubito che si bloccherà con 'allSongsArray.count', ma non mostrerà nulla ... – Grimxn

+0

Oh sì, hai ragione. Non mostra nulla. Come posso mostrare 25 canzoni? @Grimxn –

risposta

12

Si dovrebbe tornare allSongsArray.count e per evitare di essere celle vuote restituiti utilizzano yourTableView.reloadData dopo aver compilato il vostro allSongsArray.

2

Quando si crea l'array per la prima volta, questo è vuoto. Quindi, ti darà l'errore legato.

Provare a restituire invece il conteggio dell'array di brani.

In primo luogo è necessario ottenere i dati nell'array e quindi aggiornare la vista tabella.

Ecco un esempio di codice:

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

ho provato, ma poi le celle sono vuote. Come posso riempire le celle con le mie canzoni? –

+0

per prima cosa serve una funzione per riempire l'array di canzoni. e loro devono aggiungere capacità di aggiornamento alla tua classe. nell'azione di aggiornamento basta aggiornare la tabella utilizzando tableView.reloadData() –

+0

controllare il codice sopra. Si prega di notare che è possibile aggiungere capacità di aggiornamento dallo storyboard –

0

Si prega di restituire il conteggio la matrice reale invece di statica

return allsongsarray.count 
Problemi correlati