2016-04-23 62 views
0

我是一個初級水平的開發商和我被困在這我無法弄清楚這個很簡單的事情。
我有一類是AFHTTPRequestOperationManager擴展。意味着它是在這個類我有我所有的代碼從Imgur API獲取圖像,並使用AFNetworking我已經解析了高達哪裏開始獲取圖像的唯一鏈路級別的數據@interface apiClient : AFHTTPRequestOperationManager
現在rootViewController這是一個UICollectionViewController擴展。在它的viewDidLoad我將來電轉到我的APIClient,它開始從方法的方法移動,最後給我一個NSMutableArray其中包含了圖像鏈接,我會在我的CollectionViewCellUIImageView使用。
問題是我用這最後的鏈接發回給我的rootViewControllerGalleryCollectionViewController傳遞解析數據,以UICollectionView

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

的問題是,在gcvc調用numberOfItemsInSection纔可以從API任何迴應。這意味着計數結果爲零,因此它不顯示數據。那麼我怎樣才能讓它從apiClient類首先獲得API調用,然後再製作viewController。我希望我已經清楚地說明了我的問題,如果需要分享更多的代碼,我會做。



UPDATE
授權之後此方法得到畫廊圖像:

- (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被接收與圖像鏈接的數組,然後重新加載集合視圖爲:

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

但它給「UICollectionView:必須初始化一個非零布局參數」,雖然該數組不是空。

+0

更新與相關的代碼,獲取數據的問題。檢索數據時,您需要重新加載集合(在主線程上)。 – rmaddy

+0

@rmaddy立即檢查 –

+0

您正在創建新的視圖控制器,而不是訪問現有的視圖控制器。 – rmaddy

回答

0

這行下面的代碼是不正確:

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

您需要使用塊或委託這裏的做法,會傳回數組回到你collectionViewController並重新加載collecrionView。

即使從API類的方法調用似乎是委託方法正確的,但使之成爲protocal方法。這樣你不需要改變太多。它會像下面的東西:

[self.delegate recieveGalleryImagesLinks:galleryImgLinkArr 

時調用API,正在等待迴應顯示activityIndi​​cator加載數據和。

+0

我試着用'@ protocol'來處理它,就像你建議的那樣,但是似乎有一個問題:'沒有類型或協議名'這裏是它的鏈接:http://stackoverflow.com/questions/36827903/no-類型或協議命名的 –