

毎度申し訳ありません。

URL を配列にし TableView に並べたいのですが、うまくいきません。

多分１つの Cell に、配列 `urls` から取り出された URL ではなくて、配列 `urls` が、そのまま１つの Cell
に並べられているようなのですが、その解決方法がわかりません。

ご存知の方がいらっしゃいましたら教えていただけませんでしょうか。  
よろしくお願い致します。

他クラスで作ったサムネイル画像が表示されるようになっています。

[code]

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"movieCell" forIndexPath:indexPath];
    
    
        NSURL *url1 = [NSURL URLWithString:@"http://www.ajisaba.net/motion/dnld.php?fpath=penguin.mp4"];
    
        NSURL *url2 = [NSURL URLWithString:@"http://www.ajisaba.net/motion/dnld.php?fpath=emu.mp4"];
    
        NSArray *urls = [NSArray arrayWithObjects:url2,url1,nil];
    
        NSLog(@"urls count:%@", urls);
    
    
        for (int i=0; i<_urls.count; i++)
        {
    
            MPMoviePlayerController *moviePlayerController = [[MPMoviePlayerController alloc]initWithContentURL:_urls[i]];
    
            [moviePlayerController setScalingMode:MPMovieScalingModeAspectFit];
    
            //[moviePlayerController.view setFrame:CGRectMake(0, 0, 320, 170)];
    
    
            if([self.movieList indexOfObject:moviePlayerController] == NSNotFound ){
                [self.movieList insertObject:moviePlayerController atIndex:indexPath.row];
            }
    
        }
    
    
        return cell;
    }
    
[/code]


CC BY-SA 3.0
2015-02-06T07:36:46.960
6062
2015-02-06T14:58:01.547
2015-02-06T08:15:29.660
8059
8059
question
ios objective-c xcode
URL を配列にして TableView に並べたい


cellForRowAtIndexPathは表示対象となるdataSourceの件数分呼ばれます。  
なので、cellForRowAtIndexPathの中でdataSource（今回のケースではurls）をループさせる必要はありません。  
あらかじめuriをインスタンス変数等で保持しておき、各行に応じた値を取得して設定した方が良いです。

[code]

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"movieCell" forIndexPath:indexPath];
        // セルにURIを保持 ※本来はUITableViewCellにuriというプロパティはありません。
        cell.uri = _urls[indexPath.row];
    
        return cell;
    }
    
[/code]

この辺りはUITableViewを使用する上では当然とされる知識だと思いますので、  
差し出がましいですが、一度調べてみることをお勧めします。  
※分かりやすいサンプルを解説付きで載せてくださっているブログがたくさんあります。

----- 追記 -----  
こちらの質問の主旨からは少し外れるかもしれませんが、回答に誤解を与えてしまいそうな記述がありましたので少し訂正させてください。

> cellForRowAtIndexPathは表示対象となるdataSourceの件数分呼ばれます。

と簡単に書いてしまいましたが、実際は異なります。

細かい説明は割愛させていただきますが、UITableViewはメモリを効率よく使えるように、  
セルを再利用するようになっています。  
なので「dataSourceが100件あるから初期表示時にcellForRowAtIndexPathを100回呼んで終わり」ではなく、画面表示後もTableViewのスクロールにあわせて何度も呼ばれます。

numberOfRowsInSectionで適切な値を返していれば、  
indexPathがdataSourceから溢れる事はないため、下記の取り方自体は問題ありません。

> _urls[indexPath.row]


CC BY-SA 3.0
2015-02-06T08:01:08.693
6064
2015-02-06T14:58:01.547
2015-02-06T14:58:01.547
3516
3516
6062
answer