我使用AFNetworking 3在json中下载我的Firebase数据库。一切正常但函数cellForRoAtIndexPath出现崩溃。 感谢
工作:
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];
}
不起作用:(NSDictionary * array = [self.contestArray objectAtIndex:indexPath.row];)
- (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;
}
JSON:
{
"Concours-1" : {
"Description" : "Description du concours",
"Title" : "Titre"
},
"Concours-2" : {
"Description" : "Description du concours",
"Titre" : "iPhone 6"
}
}
记录崩溃:
- [ NSDictionaryI objectAtIndex:]:无法识别的选择器发送到实例0x61000086c8c0 2017-07-18 10:00:26.787 jojol67 [7003:4420828] ***由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [__ NSDictionaryI objectAtIndex:]:无法识别的选择器已发送例如0x61000086c8c0' ***第一次抛出调用堆栈: ( 0 CoreFoundation 0x000000010c084b0b __exceptionPreprocess + 171 1 libobjc.A.dylib 0x000000010e5c9141 objc_exception_throw + 48 2 CoreFoundation 0x000000010c0f4134 - [NSObject(NSObject)doesNotRecognizeSelector:] + 132 3 CoreFoundation 0x000000010c00b840 ___转发_ + 1024 4 CoreFoundation 0x000000010c00b3b8 _CF_forwarding_prep_0 + 120 5 jojol67 0x000000010756db3f - [DEMOConcoursTableViewController collectionView:cellForItemAtIndexPath:] + 191 6 UIKit 0x000000010d162925 - [UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:notify:] + 446 7 UIKit 0x000000010d162761 - [UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:] + 35 8 UIKit 0x000000010d1679bd - [UICollectionView _updateVisibleCellsNow:] + 4764 9 UIKit 0x000000010d16d38e - [UICollectionView layoutSubviews] + 313 10 UIKit 0x000000010c8f355b - [UIView(CALayerDelegate)layoutSublayersOfLayer:] + 1268 11 QuartzCore 0x000000010c6a4904 - [CALayer layoutSublayers] + 146 12 QuartzCore 0x000000010c698526 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 370 13 QuartzCore 0x000000010c6983a0 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24 14 QuartzCore 0x000000010c627e92 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 294 15 QuartzCore 0x000000010c654130 _ZN2CA11Transaction6commitEv + 468 16 QuartzCore 0x000000010c654b37 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 115 17 CoreFoundation 0x000000010c02a717 CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION + 23 18 CoreFoundation 0x000000010c02a687 __CFRunLoopDoObservers + 391 19 CoreFoundation 0x000000010c00f720 __CFRunLoopRun + 1200 20 CoreFoundation 0x000000010c00f016 CFRunLoopRunSpecific + 406 21 GraphicsServices 0x00000001103c2a24 GSEventRunModal + 62 22 UIKit 0x000000010c830134 UIApplicationMain + 159 23 jojol67 0x000000010752ef5f main + 111 24 libdyld.dylib 0x000000010f31d65d start + 1 25 ??? 0x0000000000000001 0x0 + 1 ) libc ++ abi.dylib:以NSException类型的未捕获异常终止
/////// Firebase实时数据库////////
答案 0 :(得分:3)
您的id responseObject
不是数组,因为您的JSON包含的对象不是数组。应用程序崩溃是因为您在NSDictionary对象上调用objectAtIndex
。
如果您想将此JSON作为数组访问,您可能希望将其格式化为类似的内容,
[{
"Concours": 1,
"Description": "Description du concours",
"Title": "Titre"
}, {
"Concours": 2,
"Description": "Description du concours",
"Titre": "iPhone 6"
}]
答案 1 :(得分:0)
当前JSON:
{
"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"
}
]
答案 2 :(得分:0)
" - [NSDictionaryI objectAtIndex:]:无法识别的选择器发送到实例0x61000086c8c0" 似乎 self.contestArray 是 NSDictionary类;
您可以记录 responseObject 它可能是Dictionary,而不是Array;
答案 3 :(得分:0)
它会帮助你做出这样的回应:
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
}