2016-03-28 12 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

私はallSongsArray.countnumberOfRowsInSectionを変更しようとしましたが、それは同じエラーで終わります。

+1

の代わりにカウント返却してください。クエリが実行される前に配列には0個の項目が含まれます。例外が発生したときに、どのインデックスにアクセスしようとしていますか? – Paulw11

+0

配列が空であると宣言されているので、行数としてハードコードされた25で確実にクラッシュします。私は 'allSongsArray.count'でクラッシュするのではないかと疑いますが、何も表示されません... – Grimxn

+0

ああ、そうだよ。それは何も表示されません。どのように私は25曲を表示できますか? @Grimxn –

答えて

12

あなたはallSongsArray.countを返す必要がありますし、あなたのallSongsArrayを記入した後、空のセルがyourTableView.reloadDataを使用返送されないように。

2

初めてアレイを作成するときは空です。したがって、それはあなたに縛られたエラーを与えます。

代わりに歌曲の数を返そうとしてください。

最初にデータを配列に取得してから、テーブルビューを更新する必要があります。ここで

はサンプルコードです:

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

を再ロードしましたが、セルは空です。どのように私は私の曲で細胞を埋めることができますか? –

+0

まず、ソングの配列を埋める関数が必要です。彼らはクラスにリフレッシュ能力を追加する必要があります。リフレッシュアクションでは、tableView.reloadData()を使用してテーブルを更新してください –

+0

上記のコードを確認してください。ストーリーボードからリフレッシュ能力を追加できます –

0

実際の配列は、あなたは間違いなく `allSongsArray.count`ではなく、リテラルの数を返す必要があります静的

return allsongsarray.count 
関連する問題