无法从 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 背景