0

在我编写的一个方法中,我声明了一个类“A”的实例并在其上调用一个方法。在运行时,当方法运行时,我的应用程序崩溃。它说一个无法识别的选择器被发送到一个类“B”的实例,即使我声明了一个“A”的实例。我在某处读到我可能无法正确管理我的内存,因此它将方法发送到另一个类,但我使用的是 ARC,所以这甚至不应该成为问题。帮助将不胜感激!

The error I'm getting:
2011-08-27 01:25:49.859 Intelligenda[49385:bc03] PVC: <HomeViewController: 0x59359e0>
2011-08-27 01:25:49.945 Intelligenda[49385:bc03] -[HomeViewController addNewClass:]: unrecognized selector sent to instance 0x59359e0
2011-08-27 01:25:49.947 Intelligenda[49385:bc03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[HomeViewController addNewClass:]: unrecognized selector sent to instance 0x59359e0'

以及被调用的方法:

-(IBAction)done:(id)sender{

    [teacherName resignFirstResponder];
    [className resignFirstResponder];

    IntelligendaAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
    UINavigationController *nav = delegate.navController;

    [nav popViewControllerAnimated:YES];

    ClassesViewController *classesParentViewController = (ClassesViewController *) nav.topViewController;

    ClassIG *theNewClass = [[ClassIG alloc] init];
    theNewClass.className = className.text;
    theNewClass.teacherName = teacherName.text;

    NSIndexPath *indexPath;


    theNewClass.subject = [tableView cellForRowAtIndexPath:indexPath].textLabel.text;



    // add reminder to array
    NSLog(@"PVC: %@", [classesParentViewController description]);

    [classesParentViewController addNewClass:theNewClass];

}
4

3 回答 3

1

比如说,声明一个指针NSArray* fred什么都不做(除了一些编译时警告消息)来确保它fred是一个NSArray. 这是你分配给它的东西fred。如果您分配一个NSDateFormatter,那么就是这样fred

于 2011-08-27T03:06:47.930 回答
1

您假设应用程序委托的导航控制器ClassesViewController顶部有一个显然是有缺陷的。它有一个HomeViewController顶部。你的结构看起来可能有点复杂,因为你有一个按钮连接到控制器类的其他部分的动作,所以可能有很多原因。

首先要检查:如果您以编程方式实例化按钮,那么您是否不小心将按钮添加到错误的控制器?如果您使用图形界面设计器设计所有内容,但将其保存在单个 NIB 中,是否有可能您复制并粘贴了一个按钮而忘记更改其连接的内容?

如果您最终可以使用多个导航控制器,您确定应用程序委托持有的那个当前在屏幕上吗?

于 2011-08-27T05:44:37.010 回答
0

简短的回答是类型转换和类型转换是 objc 程序员的练习。

在这里阅读我的答案:

将 NSNumber* 传递给 NSString* 预期参数不会导致编译器警告/错误

...有关声明/强制转换对象的变量与其他语言有何不同以及如何检测这些情况的更多信息。

于 2011-08-27T03:51:15.287 回答