将解析数据传递给UICollectionView

时间:2016-04-23 16:48:56

标签: ios objective-c uicollectionview afnetworking-2

我是一名初级开发人员,我很困惑这个非常简单的事情,我无法弄明白。
我有一个AFHTTPRequestOperationManager扩展的课程。这意味着它是@interface apiClient : AFHTTPRequestOperationManager在这个类中,我所有的代码都是从Imgur API获取图像并使用AFNetworking我将数据解析到一个级别,我开始只获取图像的链接。< br />现在rootViewController扩展了UICollectionViewController。在它的viewDidLoad我发送了一个呼叫到我的APIClient,它开始从方法转移到方法,最后给我一个NSMutableArray,其中包含我将在我的UIImageView中使用的图像链接CollectionViewCell
问题我正在使用此功能将最终链接发送回rootViewController,即GalleryCollectionViewController

 GalleryCollectionViewController *gcvc = [[GalleryCollectionViewController alloc] init];
    [gcvc recieveGalleryImagesLinks:galleryImgLinkArr];

问题在于gcvc在调用numberOfItemsInSection之前它可以从API获得任何响应。这意味着计数结果为零,因此它不显示数据。那么如何让它首先从apiClient类获取API调用,然后创建viewController。我希望我已经明确说明了我的问题,如果需要共享更多代码,我会这样做。



更新
授权后,此方法获取图库图像:

- (void)galleryAlbum:(NSString *)ID {

NSLog(@"ID is %@", ID);

[self GET:[NSString stringWithFormat:@"%@3/gallery/album/%@", self.baseURL,ID] parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

    self.galleryData = (NSDictionary *)responseObject;

    galleryDataArr = [[NSMutableArray alloc] init];
    galleryDataArr = [self.galleryData valueForKey:@"data"];

    galleryImagesArr = [[NSMutableArray alloc] init];
    galleryImagesArr = [galleryDataArr valueForKey:@"images"];

    galleryImgLinkArr = [[NSMutableArray alloc] init];
    galleryImgLinkArr = [galleryImagesArr valueForKey:@"link"];

    GalleryCollectionViewController *gcvc = [[GalleryCollectionViewController alloc] init];
    [gcvc recieveGalleryImagesLinks:galleryImgLinkArr];

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    NSLog(@"Failed #2");

    }];
}

这里gcvc正在接收带有images链接的数组,然后将集合视图重新加载为:

    -(void)recieveGalleryImagesLinks:(NSMutableArray *)array
{
    self.imageLinks = [[NSMutableArray alloc] initWithArray:array];
    NSLog(@"Array: %@",self.imageLinks);
    [self.collectionView reloadData];
}

但是它给出了“UICollectionView:必须用非零布局参数初始化”,尽管数组不是空的。

1 个答案:

答案 0 :(得分:0)

以下这行代码不正确:

function make_thumb($image_path, $thumb_path, $thumb_width) { 
    $src_img = imagecreatefromjpeg("$image_path"); 
    $origw=imagesx($src_img); 
    $origh=imagesy($src_img); 
    $new_w = $thumb_width; 
    $diff=$origw/$new_w; 
    $new_h=$new_w; 
    $dst_img = imagecreatetruecolor($new_w,$new_h); 
    imagecopyresized($dst_img,$src_img,0,0,0,0,$new_w,$new_h,imagesx($src_img),imagesy($src_img)); 
    imagejpeg($dst_img, "$thumb_path"); 
    RETURN TRUE; 
}

你需要在这里使用一个块或委托方法,它会将数组传回给你的collectionViewController并重新加载collecrionView。

即使是来自API类的方法调用似乎对委托方法也是正确的,但要使其成为一种协议方法。这样你就不需要做太多改变。它将如下所示:

GalleryCollectionViewController *gcvc = [[GalleryCollectionViewController alloc] init]; 
[gcvc recieveGalleryImagesLinks:galleryImgLinkArr]; 

什么时候调用API并等待响应显示activityIndi​​cator来加载数据。