发送到实例的无法识别的选择器:将@property id设置为tableviewcontroller

时间:2014-04-15 02:31:10

标签: ios objective-c unrecognized-selector

所以我试图将我的图像访问器代码集成到我的应用程序中但由于某种原因我一直遇到这个例外:

2014-04-14 21:20:34.876 1k[21130:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewController setParent:]: unrecognized selector sent to instance 0x10ab7e8a0'

当我调试时,当我尝试设置tableViewController.parent=self;时出现错误(这是后来的控制器可以访问UploadViewController的方式,调用segue的UploadViewController的代码看起来像这样

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([[segue identifier] isEqualToString:@"ToTableView"]) {
    UINavigationController *navigationController = [segue destinationViewController];
    TableViewController *tableViewController = navigationController.viewControllers[0];
    tableViewController.parent = self;
    tableViewController.groups = (NSArray *)sender;
}}

TableViewController的头文件如下所示:

@interface TableViewController : UITableViewController <AssetsAccessorDelegate,      UIAlertViewDelegate> {
      AssetsAccessor *assetsAccessor;
}

@property (nonatomic, retain) id parent;
@property (nonatomic, retain) NSArray *groups;

@end

我第一次通过Github发现了这个功能,现在我正在尝试将它集成到我的代码中我不明白为什么它现在给我这个问题。

这个错误可能由于许多不同的原因而发生,我真的对如何处理这个问题感到迷茫。

2 个答案:

答案 0 :(得分:2)

我打赌tableViewController并非TableViewController。在这行代码中加上一个断点:

tableViewController.parent = self;

...然后在调试器窗口中输入以下内容:

po tableViewController

po表示&#34;打印对象&#34;。你应该看到这样的东西:

<TableViewController: 0x100615120>

如果它看起来像这样:

<UITableViewController: 0x100615120>

......那就是你的问题。如果是这样,那么navigationController.viewControllers[0]就不是正确的班级。查看设置的代码(或故事板)中的位置。

答案 1 :(得分:0)

navigationController.viewControllers[0]是UITableViewController的一个实例,而不是你的TableViewController类。