Ios 那么您有一个崩溃日志吗?错误消息是明确的,并用JSON结构确认:您的JSON是顶级的NSDictionary,而不是数组。您的self.contesticArray是NSDictionary而不是NSArray,因此您必须使用NSDictionary*数组
Ios 那么您有一个崩溃日志吗?错误消息是明确的,并用JSON结构确认:您的JSON是顶级的NSDictionary,而不是数组。您的self.contesticArray是NSDictionary而不是NSArray,因此您必须使用NSDictionary*数组,ios,objective-c,json,crash,Ios,Objective C,Json,Crash,那么您有一个崩溃日志吗?错误消息是明确的,并用JSON结构确认:您的JSON是顶级的NSDictionary,而不是数组。您的self.contesticArray是NSDictionary而不是NSArray,因此您必须使用NSDictionary*数组=[self.contesticArray objectForKey:“key”]进行访问;使用NSLog(@“%@”,self.contestArray)查看self的键和值。contestArray@ReinierMelian///work
那么您有一个崩溃日志吗?错误消息是明确的,并用JSON结构确认:您的JSON是顶级的NSDictionary,而不是数组。您的self.contesticArray是NSDictionary而不是NSArray,因此您必须使用NSDictionary*数组=[self.contesticArray objectForKey:“key”]进行访问;使用NSLog(@“%@”,self.contestArray)查看self的键和值。contestArray@ReinierMelian///work///NSDictionary*array=[self.competicsarray valueForKey:@“Concours-1”];///不起作用(我需要那个)/////NSDictionary*array2=[self.competingarray objectAtIndex:indexPath.row];事实上,您检索到的词典中没有任何数组。我们如何做到这一点?Thanks@victorbill我添加了更多信息。@sleepwalkerfx“Concours-1”和“Concours-2”是分开的对象,而不是内部对象值。。。这些是主要的object@victorbill检查我的答案,它将帮助你100%没有任何变化的响应json。快乐编码:)@ParvendraSingh我本可以提供相同的解决方案,但这是一种非常糟糕的做法和设计,这将在将来导致更多的困难。因为他将数据源用于集合视图,所以正确的方法是在可行的情况下将JSON模式更改为数组格式,而不是在以后出现更严重的问题。字典不是有序的数据结构,所以这是他在处理代码时必须处理的另一个陷阱。那么我们该怎么做呢?Thanks@victorbill我添加了更多信息。@sleepwalkerfx“Concours-1”和“Concours-2”是分开的对象,而不是内部对象值。。。这些是主要的object@victorbill检查我的答案,它将帮助你100%没有任何变化的响应json。快乐编码:)@ParvendraSingh我本可以提供相同的解决方案,但这是一种非常糟糕的做法和设计,这将在将来导致更多的困难。因为他将数据源用于集合视图,所以正确的方法是在可行的情况下将JSON模式更改为数组格式,而不是在以后出现更严重的问题。字典不是有序的数据结构,因此这是他在处理代码时必须处理的另一个陷阱。@victorbill试试这个,它肯定能解决你的问题。@victorbill试试这个,它肯定能解决你的问题。
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:@"https://jojol-concours-lists.firebaseio.com/.json" parameters:URLParameters progress:nil success:^(NSURLSessionTask *task, id responseObject) {
self.contestArray = responseObject;
[_collectionView reloadData];
} failure:^(NSURLSessionTask *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return [self.contestArray count];
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath {
DemoCollectionViewCell *retVal = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionViewCell"
forIndexPath:indexPath];
//////// Not work ///////
NSDictionary *array = [self.contestArray objectAtIndex:indexPath.row];
//////// Not work ///////
retVal.name.text = @"";
retVal.contentView.layer.cornerRadius = 10;
retVal.contentView.layer.masksToBounds = YES;
return retVal;
}
{
"Concours-1" : {
"Description" : "Description du concours",
"Title" : "Titre"
},
"Concours-2" : {
"Description" : "Description du concours",
"Titre" : "iPhone 6"
}
}
[{
"Concours": 1,
"Description": "Description du concours",
"Title": "Titre"
}, {
"Concours": 2,
"Description": "Description du concours",
"Titre": "iPhone 6"
}]
{
"Concours-1" : {
"Description" : "Description du concours",
"Title" : "Titre"
},
"Concours-2" : {
"Description" : "Description du concours",
"Titre" : "iPhone 6"
}
}
[
{
"Description": "Description du concours",
"Title": "Titre"
},
{
"Description": "Description du concours",
"Titre": "iPhone 6"
}
]
NSDictionary *jsonDict =responseObject;
NSArray *allKeys = [jsonDict allKeys];
NSMutableArray *allDataArray = [NSMutableArray new];
for (int x = 0; x<allKeys.count; x++) {
NSString *key = [allKeys objectAtIndex:x];
[allDataArray addObject:[jsonDict valueForKey:key]];
// then reload your collection on allDataArray
}