所以我使用我的JSON使用UICollectionView。我为解析编写了这段代码,但我不明白为什么它不起作用。我的JSON有(#jsontest2]后键" imageMain")。
所以我粘贴我的代码,请帮助我:
@property (nonatomic,strong) NSMutableArray *patternImagesArray;
@end
@implementation ViewController
@synthesize patternImagesArray = _patternImagesArray;
NSURLConnection *connection;
NSMutableData *webdata;
尝试从JSON获取数据:
-(void) viewDidLoad{
_patternImagesArray = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:@"site"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
connection = [NSURLConnection connectionWithRequest:request delegate:self];
if (connection) {
webdata = [[NSMutableData alloc]init];
}
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[webdata setLength:0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[webdata appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
}
JSON解析:
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSDictionary *allDataDictionary = [NSJSONSerialization JSONObjectWithData:webdata options:0 error:nil];
NSArray *tmp =[allDataDictionary objectForKey:@"jsontest2"];
if (tmp.count>0){
for (NSDictionary *diction in tmp) {
[self.patternImagesArray addObject:diction];
}
NSLog(@"%@", self.patternImagesArray);
}
[self.collectionView reloadData];
}
一些定制的东西:
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
PatternView *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"PatternCell" forIndexPath:indexPath];
NSString *myPatternString = [[self.patternImagesArray objectAtIndex:indexPath.row] valueForKey:@"thumb"];
NSLog(@"myPatternString %@",myPatternString);
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:myPatternString]];
cell.patternImageView.image = [UIImage imageWithData:data];
return cell;
}
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return [self.patternImagesArray count];
}
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{
return CGSizeMake(100.0, 100.0);
}
答案 0 :(得分:1)
你正在滥用变量" array"两个完全不同的目的。
潜在的原因是你没有为变量寻找合理的名称而烦恼。 "阵列"实际上是一个全局变量。它不仅可以从您文件中的任何代码访问,还可以从程序中任何位置的任何代码访问。看看这段代码:
NSDictionary *allDataDictionary =[NSJSONSerialization JSONObjectWithData:_webdata
options:kNilOptions error:nil];
array =[allDataDictionary objectForKey:@"jsontest2"];
for (array in allDataDictionary) {
}
首先将JSON数据解析为allDataDictionary(您不必费心检查错误)。您可以访问一个键" jsontest2"从字典中将其存储到全局变量" array"中。无论在"阵列"之前现在已经过去了。
然后你有一个for循环,使用与循环变量相同的全局变量!这完全是胡说八道。但是你还需要意识到这会迭代你字典中的 keys ,所以数组现在是一个NSString而不再是一个数组。
之后你的代码变得更糟......
逐行浏览您的代码。每一行,都要考虑它在做什么。那里有许多严重的问题。