0

AFNetworking を使用して、UITableView に YouTube ビデオを入力します。YouTube API では、リクエストごとに最大 50 件の結果しか許可されません。そのため、50 を超える結果を得るには、複数の URL を使用する必要があります。

指定された URL で AFNetworkings AFJSONRequestOperation を実行するメソッドを作成しました。

JSONデータを受け取る前にUITableが作成されていると思います。メソッドを作成する前は、すべてが完全に機能していました。

メソッドを作成したのはこれが初めてです。ここ数日間、UITable に 50 以上の YouTube ビデオを読み込もうとしています。私のコードを見てください。

これが私のコードです。プロジェクト全体をからダウンロードすることもできます

QQViewController.m

-(void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];
    //[super viewDidLoad];

    NSString *urlAsString = @"http://gdata.youtube.com/feeds/api/playlists/PL7CF5B0AC3B1EB1D5?v=2&alt=jsonc&max-results=50";


    // I am not sure how i am supposed to populate the uitableview with the second link :(

     NSString *urlAsString2 = @"http://gdata.youtube.com/feeds/api/playlists/PL7CF5B0AC3B1EB1D5?v=2&alt=jsonc&max-results=50&start-index=51";



    self.myurl = [NSURL URLWithString:urlAsString];

    [self getJSONfromURL:self.myurl];

[self.tableView reloadData];

}

-(void)viewDidAppear:(BOOL)animated {

        [super viewDidAppear:animated]; 

        self.videoMetaData = [self.myJSON valueForKeyPath:@"items.video"];

        NSLog(@" QQVC video Meta Data %@", self.videoMetaData);


        self.allThumbnails = [self.myJSON valueForKeyPath:@"data.items.video.thumbnail"];


        // The table need to be reloaded or else we will get an empty table.

        [self.tableView reloadData]; // Must Reload

        // NSLog(@" video Meta Data %@", self.videoMetaData);


}

// ここにメソッドがあります

-(void)getJSONfromURL:(NSURL *)url {

    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    // setup AFNetworking stuff
    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        // call delegate or processing method on success

       // [self.myJSON = (NSArray *)JSON];

        self.myJSON = [JSON valueForKey:@"data"];
        [self.tableView reloadData];
       //NSLog(@" in get JSon method %@", self.myJSON);

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
        NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo);
    }];


    [operation start];



}

- (void)viewDidLoad
{
    [super viewDidLoad];
}
4

2 に答える 2

1

getJSONfromURL: メソッドにいくつかの問題がありました。主な問題は、self.myJSON を [JSON valueForKey:@"data"] として定義していたのに、self.allThumbnails を [self.myJSON valueForKeyPath:@"data.items.video.thumbnail"] として定義していたことです。再び「データ」なので、self.thumbnails は null でした。これはうまくいくようです:

-(void)getJSONfromURL:(NSURL *)url {
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    // setup AFNetworking stuff
    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        self.myJSON = [JSON valueForKey:@"data"];
        self.allThumbnails = [self.myJSON valueForKeyPath:@"items.video.thumbnail"];
        self.videoMetaData = [self.myJSON valueForKeyPath:@"items.video"];
        [self.tableView reloadData];

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
        NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo);
    }];

    [operation start];
}

複数の URL から日付を読み込みたい場合は、次のように実行できます。URL 文字列の配列の進行状況を追跡するカウンターを追加しました。テーブルはダウンロードのたびに再読み込みされるため、一部のデータが表示される前にすべてが完了するのを待つ必要はありません。

@interface QWViewController ()
@property (strong,nonatomic) NSArray *urlStrings;
@end

@implementation QWViewController {
    int counter;
}


-(void)viewDidLoad {
    [super viewDidLoad];
    counter = 0;
    NSString *urlAsString = @"http://gdata.youtube.com/feeds/api/playlists/PL7CF5B0AC3B1EB1D5?v=2&alt=jsonc&max-results=50";
    NSString *urlAsString2 = @"http://gdata.youtube.com/feeds/api/playlists/PL7CF5B0AC3B1EB1D5?v=2&alt=jsonc&max-results=50&start-index=51";
    self.urlStrings = @[urlAsString,urlAsString2];
    self.allThumbnails = [NSMutableArray array];
    self.videoMetaData = [NSMutableArray array];
    [self getJSONFromURL:self.urlStrings[0]];
}


-(void)getJSONFromURL:(NSString *) urlString {
    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        self.myJSON = [JSON valueForKey:@"data"];
        [self.allThumbnails addObjectsFromArray:[self.myJSON valueForKeyPath:@"items.video.thumbnail"]];
        [self.videoMetaData  addObjectsFromArray:[self.myJSON valueForKeyPath:@"items.video"]];
        [self.tableView reloadData];
        counter += 1;
        if (counter < self.urlStrings.count) [self getJSONFromURL:self.urlStrings[counter]];
    }

    failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
    NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo);
    }];
    [operation start];
}
于 2013-02-14T05:09:28.637 に答える
0

リロードテーブルビュー呼び出しをここに移動します。

-(void)getJSONfromURL:(NSURL *)url {

    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    // setup AFNetworking stuff
    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        // call delegate or processing method on success

       // [self.myJSON = (NSArray *)JSON];

        self.myJSON = [JSON valueForKey:@"data"];
        [self.tableView reloadData];
       //NSLog(@" in get JSon method %@", self.myJSON);

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
        NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo);
    }];


    [operation start];



}
于 2013-02-14T03:12:55.623 に答える