无法从 json 响应中设置部分中的 UICollectionView 项目数

Posted

技术标签:

【中文标题】无法从 json 响应中设置部分中的 UICollectionView 项目数【英文标题】:Can not set UICollectionView number of items in section from a json response 【发布时间】:2013-02-28 03:31:20 【问题描述】:

我对 ios 编程非常陌生,我正在尝试从 json 响应中设置 UICollectionView 项目。

这是我的代码:

- (void)viewDidLoad

    [super viewDidLoad];
    [self downloadJSONData];

    /* uncomment this block to use subclassed cells */
    [self.collectionView registerClass:[CVCell class] forCellWithReuseIdentifier:@"cvCell"];
    /* end of subclass-based cells block */

    // Configure layout
    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
    [flowLayout setItemSize:CGSizeMake(150, 150)];
    [flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
    [self.collectionView setCollectionViewLayout:flowLayout];
    [self.collectionView reloadData];


-(void) downloadJSONData 
    NSURL *serviceUrl = [[NSURL alloc]initWithString:@"http://myurlhere.com/"];
    NSURLRequest *request = [NSURLRequest requestWithURL:serviceUrl];
    NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    [conn start];


-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

    self.data = [[NSMutableData alloc]init];


-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)responsedata 
    [self.data appendData:responsedata];


-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
    NSLog(@"Error : %@", error);


-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
    NSLog(@"Succeeded! Received %d bytes of data",[self.data length]);
    NSString *txt = [[NSString alloc] initWithData:self.data encoding: NSASCIIStringEncoding];
    NSLog(@"response data %@", txt);
    self.dictionaryData = [txt JSONValue];


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


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

    //NSMutableArray *sectionArray = [self.dataArray objectAtIndex:section];
    self.jsonArray = [self.dictionaryData objectForKey:@"images"];
    return [self.jsonArray count];


-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 

    // Setup cell identifier
    static NSString *cellIdentifier = @"cvCell";

    /*  Uncomment this block to use nib-based cells */
    // UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
    // UILabel *titleLabel = (UILabel *)[cell viewWithTag:100];
    // [titleLabel setText:cellData];
    /* end of nib-based cell block */

    /* Uncomment this block to use subclass-based cells */
    CVCell *cell = (CVCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
    NSMutableArray *data = [self.dataArray objectAtIndex:indexPath.section];
    NSString *cellData = [data objectAtIndex:indexPath.row];
    [cell.titleLabel setText:cellData];
    /* end of subclass-based cells block */

    // Return the cell
    return cell;

当我运行代码时,它什么也不显示。我想要的是它显示项目并且数量等于数组的计数。还有一件事,关于如何将图像异步加载到集合视图中的任何建议?

对不起我的英语。如果有人可以帮助我,我会很高兴。

谢谢。干杯!

【问题讨论】:

connectionDidFinishLoading方法中,添加[self.collectionView reloadData]; 有效!非常感谢 “我的英语很抱歉。如果有人能帮我解决这个问题,我会很高兴。” 看不出你的英语有什么问题。你不必感到抱歉。 很高兴知道这一点。如果有帮助,请您接受。答案旁边有一个复选标记。 好的,它说我必须等待几分钟才能接受答案。无论如何,关于如何为项目异步加载图像有什么建议吗? 【参考方案1】:

connectionDidFinishLoading方法中添加:

[self.collectionView reloadData];

对于 Asyn 图像加载,您可以检查以下任何一项,

    SDWebImage AsyncImageView LazyTableImages - 它适用于 UITableView,但您可以对 UICollectionView 使用相同的概念

【讨论】:

以上是关于无法从 json 响应中设置部分中的 UICollectionView 项目数的主要内容,如果未能解决你的问题,请参考以下文章

从图像响应中设置 jQuery ajax 成功中的 div 背景

无法在 axios 中设置标题

如何在本机反应中从平面列表中设置 Json 数组

如何在协议扩展中设置委托

在 ASP.NET MVC 中设置默认 JSON 序列化程序

收到响应后,是不是可以选择删除 REST API(RestAssured) 中请求中设置的多部分内容?