由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“UICollectionView 必须使用非零布局参数初始化
Posted
技术标签:
【中文标题】由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“UICollectionView 必须使用非零布局参数初始化【英文标题】:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'UICollectionView must be initialized with a non-nil layout parameter 【发布时间】:2015-12-07 16:07:14 【问题描述】:我在三个页面中有相同的代码,但是其中两个出现了这个错误:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“UICollectionView 必须使用非零布局参数进行初始化
我不明白为什么,如果三页中的代码相同,而第一页中的代码没有任何问题。
我在头文件中的代码
#import <UIKit/UIKit.h>
@interface CollectionViewController : UICollectionViewController<UICollectionViewDataSource>
@property (nonatomic,strong) NSMutableArray *marrImages;
@property (nonatomic,strong) NSMutableDictionary *mdictImageData;
@end
在.m文件中
@interface CollectionViewController ()
@end
@implementation CollectionViewController
@synthesize marrImages,mdictImageData;
static NSString * const reuseIdentifier = @"cell";
- (void)viewDidLoad
[super viewDidLoad];
//navigation bar
UIImage *image = [UIImage imageNamed:@"home.png"];
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
backButton.frame = CGRectMake(0, 0, 50, 50);
[backButton setImage:image forState:UIControlStateNormal];
// [backButton addTarget:self action:@selector(leftButtonAcion:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *button2 = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = button2;
self.title = @"Welcome";
marrImages=[[NSMutableArray alloc]init];
mdictImageData=[[NSMutableDictionary alloc]initWithObjectsAndKeys:@"circlshadow_parking.png",@"imageFile",@"Estacionamentos",@"Info",nil];
[marrImages addObject:mdictImageData];
mdictImageData=[[NSMutableDictionary alloc]initWithObjectsAndKeys:@"circlshadow_charging.png",@"imageFile",@"Carregar Saldo",@"Info", nil];
[marrImages addObject:mdictImageData];
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
#pragma mark <UICollectionViewDataSource>
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
return [marrImages count];
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
CustomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];
cell.lblIndex.text=[[marrImages objectAtIndex:[indexPath row]]valueForKey:@"Info"];
UIImage *image=[UIImage imageNamed:[[marrImages objectAtIndex:[indexPath row]]valueForKey:@"imageFile"]];
[cell.ivCartoon setImage:image];
return cell;
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
NSUInteger lastIndex = [indexPath indexAtPosition:[indexPath length] - 1];
if(lastIndex == 0)
ParkingMenu *parkingMenu = [[ParkingMenu alloc] init];
parkingMenu.modalPresentationStyle = UIModalPresentationPageSheet;
parkingMenu.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self.navigationController pushViewController:parkingMenu animated:YES];
[parkingMenu release];
else if(lastIndex == 1)
BalanceMenu *balanceMenu = [[BalanceMenu alloc] init];
balanceMenu.modalPresentationStyle = UIModalPresentationPageSheet;
balanceMenu.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self.navigationController pushViewController:balanceMenu animated:YES];
[balanceMenu release];
else if(lastIndex == 2)
else if(lastIndex == 3)
@end
【问题讨论】:
这些控制器实例是如何创建的(显示代码)? 我在故事板中有我的观点。这是我的第一个应用程序,对此我知之甚少。我需要在某个地方实例化,因为前者没有这样做,一切都很好。 所以是停车和平衡“页面”有问题吗?它们是在情节提要中定义的吗?它们在故事板中是如何定义的? 我的故事板:postimg.org/image/50natv1st 现在呢? s30.postimg.org/srmobz201/… 【参考方案1】:这段代码:
ParkingMenu *parkingMenu = [[ParkingMenu alloc] init];
parkingMenu.modalPresentationStyle = UIModalPresentationPageSheet;
parkingMenu.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self.navigationController pushViewController:parkingMenu animated:YES];
[parkingMenu release];
表明您正在创建ParkingMenu
的实例,而没有引用情节提要。大概这是 UICollectionViewController
的子类,导致您不使用指定的初始化程序 initWithCollectionViewLayout:
或从情节提要中取消归档(这也会设置布局)。
你也没有使用 ARC,所以你必须打电话给release
,你真的不应该这样做......
您需要更新代码,以便触发视图控制器之间的 segue,或者按标识符从情节提要中加载 ParkingMenu
。
【讨论】:
这取决于情节提要中的内容。无法看到您的图片,因为它在此处被阻止... 我解决了这个 UIStoryboard * mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"ParkingMenu"]; [self presentViewController:vc动画:YES完成:NULL];但是导航栏在接下来的两个页面上消失了 这是按标识符的方法(而不是 segue) 我不明白你的意思。对不起 在我的回答 1 中列出了 2 个潜在的解决方案,该代码是其中的第二个,仅供您参考以上是关于由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“UICollectionView 必须使用非零布局参数初始化的主要内容,如果未能解决你的问题,请参考以下文章
由于未捕获的异常而终止应用程序 [UIImageView _isResizable]
由于未捕获的异常“NSInternalInconsistencyException”错误而终止应用程序