NSArrayM replaceObjectAtIndex:withObject:object can not be nil'
我有一个项目与this相同的菜单,但与子菜单相同的幻灯片动画。我创建了一个名为SecondMenu.xib的xib文件名。文件所有者是UIViewController并将其命名为SecondMenuController。如果您检查项目REFrosted(check the link),则有DEMOMenuViewController(UIViewController)。在方法didSelectRowAtIndexPath:中。我在我的代码中更改了它NSArrayM replaceObjectAtIndex:withObject:object can not be nil'
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableArray *controllers = [[NSMutableArray alloc] init];
for (unsigned i = 0; i < 1; i++) {
[controllers addObject:[NSNull null]];
}
self.viewControllers = controllers;
SecondMenuController *controller = [self.viewControllers objectAtIndex:0];
if ((NSNull *)controller == [NSNull null]) {
controller = [[SecondMenuController alloc] initWithNibName:@"SecondMenu" bundle:nil];
[self.viewControllers replaceObjectAtIndex:0 withObject:controller];
}
controller.view.frame = CGRectMake(-self.view.frame.size.width, 0,self.view.frame.size.width,self.view.frame.size.height);
[self.view addSubview:controller.view];
[UIView animateWithDuration:0.5 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
controller.view.frame = CGRectMake(0, 0,self.view.frame.size.width,self.view.frame.size.height);
} completion:^(BOOL finished) {
NSLog(@"Done!");
}];
//[self hideMenu];
}
当连接到子菜单(即SecondMenuController)时,该代码适用于我。在我的SecondMenuController中,我添加一个按钮(这将连接到DEMOHomeViewController,故事板标识符是homeController)。这里是我的按钮
- (IBAction)buttonConnect:(id)sender {
DEMONavigationController *navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"contentController"];
DEMOHomeViewController *homeViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"homeController"];
navigationController.viewControllers = @[homeViewController];
self.frostedViewController.contentViewController = navigationController;
[self.frostedViewController hideMenuViewController];
}
的代码,我得到这个代码REFrosted之前,我把它改为我的代码在didSelectRowAtIndexPath方法:(正如我在第一个代码提到上文)。为什么我得到这个错误
'NSInvalidArgumentException', reason: '*** -[__NSArrayM replaceObjectAtIndex:withObject:]: object cannot be nil'
我导入所有文件。正如我所了解的,当你导入连接到文件所有者的文件时。这意味着我可以控制每个方法或函数,当你将它实例化到我的SecondMenuController时(这只是基于我的经验,如果我错了,请纠正我,我只想知道系统是如何工作的)。请参阅我的代码。我在这里错过了什么吗?希望你建议我如何解决这个问题或解释为什么我得到这个错误。
DEMONavigationController *navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"contentController"];
DEMOHomeViewController *homeViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"homeController"];
navigationController.viewControllers = @[homeViewController];
2天的搜索答案。我终于明白了。
为什么DEMOHomeViewController是零,当我点击按钮,因为SecondMenuController没有连接到DEMOHomeViewController,即使我将它实例化为SecondMenuController类的原因。我现在学习。这里的代码
我做的第一个代码。我添加此SecondMenuController.h
@property (nonatomic, weak) UIStoryboard * myself;
@property (nonatomic, strong) REFrostedViewController * ref;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil myStoryBoard:(UIStoryboard *) xStoryBoard ref: (id) xRef;
在SecondMenuController.m
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil myStoryBoard:(UIStoryboard *) xStoryBoard ref: (id) xRef
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
self.myself = xStoryBoard;
self.ref = xRef;
}
return self;
}
在我的按钮
DEMONavigationController *navigationController = [self.myself instantiateViewControllerWithIdentifier:@"contentController"];
DEMOSecondViewController *secondViewController = [self.myself instantiateViewControllerWithIdentifier:@"homeController"];
navigationController.viewControllers = @[secondViewController];
self.ref.frostedViewController.contentViewController = navigationController;
[self.ref.frostedViewController hideMenuViewController];
现在,它的工作。所有你需要做的就是调用DEMOMenuViewController的initWithNibName:方法。
控制台日志意味着你试图在NSArray中插入nil对象,这是不允许的。如果由于某种原因,您需要添加空物件使用(NSArray *)[NSNull null]
。
感谢罗素。我已经检查过了。我错过的唯一代码是,我没有在两个控制器之间添加连接。 – user3818576 2014-11-24 08:45:11
你对错误信息有什么不了解?它说'控制器'是零,你是否证实它不是零?例如'NSLog()'?你需要调试你的代码。 – zaph 2014-11-24 02:36:59
是的,homeViewController是零。为什么是零?该班级已经连接到该董事会。 – user3818576 2014-11-24 02:42:35
调试时间。仔细检查所有内容,拼写错误,类名等。重新阅读文档。 – zaph 2014-11-24 03:11:35