2

iOS アプリ内で YouTube を機能させようとしています。特定のユーザーの動画のリストを正常に取得していますが、選択した動画を別の viewController に埋め込むために didSelectRowAtIndexPath を実装するのに苦労しています。これが私が問題を抱えているコードです:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
DetailViewController *detailController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];

    GDataEntryBase *entry2 = [[feed entries] objectAtIndex:indexPath.row];
    videoArray = [[(GDataEntryYouTubeVideo *)entry2 mediaGroup] mediaContents];
    NSString *tempUrl = [videoArray objectAtIndex:0];
    NSLog(@"The URL is:%@",tempUrl);
    detailController.videoString = tempUrl;

    [self.navigationController pushViewController:detailController animated:YES];

}

これを実行するたびに、「detailController.videoString = tempUrl;」でブレークポイントを取得します。

NSLog を介して、tempUrl 文字列に次の情報が入力されていることを確認できます。

The URL is:GDataMediaContent 0x69c76a0: {url:https://www.youtube.com/v/s36krFdPmYQ?version=3&f=user_uploads&app=youtube_gdata type:application/x-shockwave-flash medium:video isDefault:true expression:full duration:1913}

GData API から動画の URL だけを抽出するにはどうすればよいですか?

ご回答ありがとうございます。

次の変更を行い、適切な URL 文字列を取得しています。

GDataEntryBase *entry2 = [[feed entries] objectAtIndex:indexPath.row];
    NSArray *mediaContents = [[(GDataEntryYouTubeVideo *)entry2 mediaGroup] mediaContents];
    GDataMediaContent *flashContent = [GDataUtilities firstObjectFromArray:mediaContents withValue:@"application/x-shockwave-flash" forKeyPath:@"type"];
    NSLog(@"The URL is:%@",[flashContent URLString]);
    detailController.videoString = [flashContent URLString];

これにより、NSLog から次の情報が得られます。

The URL is:https://www.youtube.com/v/s36krFdPmYQ?version=3&f=user_uploads&app=youtube_gdata

ただし、「detailController.videoString = [flashContent URLString];」でブレークポイントをまだ取得しています。

4

1 に答える 1

3

I was able to solve this. I added a Modal segue between the two ViewControllers and also modified my code slightly. Here is the code I ended up using after adding the segue:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    DetailViewController *detailController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];
    GDataEntryBase *entry2 = [[feed entries] objectAtIndex:indexPath.row];
    NSString *title = [[entry2 title] stringValue];
    NSArray *contents = [[(GDataEntryYouTubeVideo *)entry2 mediaGroup] mediaContents];
    GDataMediaContent *flashContent = [GDataUtilities firstObjectFromArray:contents withValue:@"application/x-shockwave-flash" forKeyPath:@"type"];
    NSString *tempURL = [flashContent URLString];

    detailController.videoString = tempURL;
    detailController.titleString = title;
    [self.navigationController pushViewController:detailController animated:YES];

}

You can view the full working YouTubeDemo app code here: https://gist.github.com/2501684

于 2012-04-26T18:36:12.590 に答える