2

当用户单击 UIAlertView 上的“确定”按钮时,我试图将用户发送到另一个控制器,但出现以下错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '***   setObjectForKey: object cannot be nil (key: classname)'

我的 UIAertView 在这样的 if 语句中:

if([placemarks count] > 0)
  {
    CLPlacemark *foundPlacemark = [placemarks objectAtIndex:0];
    UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Location set"
                       message:[NSString stringWithFormat:@"Your location, was set to %@", foundPlacemark.country]
                                                 delegate:self
                                        cancelButtonTitle:@"OK"
                                        otherButtonTitles:nil];
             [message show];

  }

我正在检查单击的按钮:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
  if(buttonIndex == 0)
{
    MasterViewController *controller=[[MasterViewController alloc]initWithNibName:@"MasterViewController" bundle:nil];
   [self.navigationController pushViewController:controller animated:YES];
  }
}

我确实有委托集:

@interface LocationViewController : UIViewController <CLLocationManagerDelegate, UIAlertViewDelegate>

UIAlertView 可以自己正常工作。对我所缺少的有什么想法吗?

4

2 回答 2

1

您是否使用 Interface Builder 来制作 MasterViewController 的 UI?MasterViewController 的 nib 文件似乎有问题。当 MasterViewController 从 xib 文件中获取 init 时,设置丢失并且出现异常。

最可能的情况是 xib 文件和文件所有者之间可能存在一些不良连接。请检查您在代码中是否删除了任何连接的 IBOutlet,但将连接保留在 xib 文件中。如果是这样,删除连接,它可以解决。

于 2013-02-25T03:52:41.737 回答
1
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
  if(buttonIndex == 0)
{
    // MasterViewController *controller=[[MasterViewController alloc]initWithNibName:@"MasterViewController" bundle:nil];
       MasterViewController *controller=[[MasterViewController alloc]init]; // creat your MasterViewController like this. 
   [self.navigationController pushViewController:controller animated:YES];
  }
}

如果这样的编码没有崩溃,我认为问题出在你的 IB

于 2013-02-25T04:03:47.043 回答