1

Instagram API を使用して必要なものを取得できますが、AFNetworking は非同期で動作するため、コードは CollectionView メソッドに直接ジャンプしますが、AFNetworking 呼び出しはまだ機能しており、CollectionView セルは読み込まれません。アレイの準備ができていません。[操作waitUntilFinished]を使用しました。しかし、何もしていないようです。

ここにコード、ありがとう!

-(void)viewDidLoad {

    [super viewDidLoad];

    NSString *path = @"https://api.instagram.com/v1/tags/snow/media/recent?access_token=836379.f59def8.fd07b9ba8ea440188dc56d2763bbf6c2";

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:path]];

    AFJSONRequestOperation *operation =
    [AFJSONRequestOperation JSONRequestOperationWithRequest:request
                                                    success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {

                                                        imageArray = [[[[JSON valueForKey:@"data"]valueForKey:@"images"]valueForKey:@"low_resolution"]valueForKey:@"url"];




                                                        for (id item in imageArray) {


                                                            [images addObject:item];

                                                        }



                                                    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON){
                                                        // NSLog(@"There was a problem: %@", [error localizedDescription]);
                                                    }];

    [operation start];
    [operation waitUntilFinished];  // DOES NOT STOP AND WAIT

}


- (NSInteger)numberOfSectionsInCollectionView: (UICollectionView *)collectionView {
    return 1;
}

- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section {

/* RETURNS ARRAY COUNT OF ZER0 HERE, BUT I AM EXPECTING A VALID ARRAY OF URLS!

   return  [imageArray count];
}

- (CollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {

    CollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"CellZero" forIndexPath:indexPath];

    return cell;

}

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {

}
4

3 に答える 3

0

すべての画像をimageArrayに追加した後、ネットワーク リクエストの成功ブロックでコレクション ビュー データを再読み込みします。

また、入れ子になった valueForKey 呼び出しを取り除くのに役立つvalueForKeypathも見てください。

于 2013-11-06T22:46:55.747 に答える
0

答えは簡単です。成功のコールバック ブロックで、単に呼び出します

[self.collectionView reloadData];

これにより、AFNetworking ライブラリが Instagram API からデータを正常にフェッチした後、コレクション ビューが確実にリロードされます。実際には、「reloadCollectionViewWithImages:(NSArray *)imageArray」という別のメソッドでコールバック関数をリファクタリングします。

- (void)reloadCollectionViewWithImages:(NSArray *)imageArray {
    for (id item in imageArray) {
        [images addObject:item];
    }
    [self.collectionView reloadData];
}

成功のコールバック内でこのメソッドを呼び出します。

他に質問があればコメントしてください:)

于 2013-11-06T22:47:37.830 に答える