我想要做的是從imageUrl
的UICollectionView
中渲染圖像,該圖像來自服務器作爲響應。 UICollectionView
沒有問題,因爲我已經用hardcoded URL
進行了測試。當我嘗試使用包含url
作爲鍵值對的array
加載它時,問題就開始了。可能是,我不知道從哪裏撥打method which is responsible for getting the response from the server
的確切位置。我完全按照應該的方式獲取響應,並將其傳遞到數組中。在調試時,我可以看到after getting response control is not going back to execute the
UICollectionView委託方法to render
imageUrl`。這是我正在嘗試的代碼。使用服務器響應在UICollectionView中顯示來自imageURL的圖像
#import "ProductCollectionViewController.h"
#import "ProductCell.h"
#import "UIImageView+WebCache.h"
@interface ProductCollectionViewController()
{
NSMutableData *receivedData;
NSMutableArray *productList;
}
@end
@implementation ProductCollectionViewController
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
static NSString * const reuseIdentifier = @"Cell";
-(void)viewDidLoad
{
[super viewDidLoad];
[self getProductList];
}
#pragma mark <UICollectionViewDataSource>
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return productList.count;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
ProductCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
NSURL *url = [[productList objectAtIndex:indexPath.row]valueForKey:@"url"];
[cell.productImageView sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:@"placeholder.jpg"]];
return cell;
}
-(void)getProductList
{
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: self delegateQueue: [NSOperationQueue mainQueue]];
NSURL * url = [NSURL URLWithString:@「http:xxxxxxxxx"];
NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url];
NSURLSessionDataTask * dataTask = [defaultSession dataTaskWithRequest:urlRequest];
[dataTask resume];
}
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
{
NSHTTPURLResponse *httpResp = (NSHTTPURLResponse*) response;
NSLog(@"status code %li", httpResp.statusCode);
receivedData=nil;
receivedData=[[NSMutableData alloc] init];
[receivedData setLength:0];
completionHandler(NSURLSessionResponseAllow);
}
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
[receivedData appendData:data];
}
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
if (error) {
// Handle error
}
else {
NSError *tempError;
NSDictionary* response=(NSDictionary*)[NSJSONSerialization JSONObjectWithData:receivedData options:kNilOptions error:&tempError];
NSLog(@"Response is :%@", response);
productList = [NSMutableArray new];
NSArray *rsBody = response [@"rsBody"];
for(NSDictionary *dict in rsBody)
{
[productList addObject:@{@「url":dict[@"productImageUrl"]}]
}
}
}
響應 {"rsBody": [{"productId":11, "productImageUrl":"http:xxxx"}, {"productId":9, "productImageUrl":"http:"xxxx"}]}
能否請您發送您的API響應? –
plz檢查,更新了問題。 –
請檢查我更新的答案,希望它的工作。 –