Objective c 运行时调试时出现问题

Objective c 运行时调试时出现问题,objective-c,debugging,xcode4.4,Objective C,Debugging,Xcode4.4,我已经为我一直在制作的一个向下搜索表应用程序编写了一些代码,但是该应用程序只有在运行时才会崩溃。Xcode在构建应用程序时不会给我任何错误。调试器输出: 2012-10-18 10:58:26.513秒[474:c07]-[NavController设置项:]:无法识别的选择器>发送到实例0xc217a00 2012-10-18 10:58:26.515秒[474:c07]*由于未捕获的异常而终止应用程序>'NSInvalidArgumentException',原因:'-[NavControl

我已经为我一直在制作的一个向下搜索表应用程序编写了一些代码,但是该应用程序只有在运行时才会崩溃。Xcode在构建应用程序时不会给我任何错误。调试器输出:

2012-10-18 10:58:26.513秒[474:c07]-[NavController设置项:]:无法识别的选择器>发送到实例0xc217a00 2012-10-18 10:58:26.515秒[474:c07]*由于未捕获的异常而终止应用程序>'NSInvalidArgumentException',原因:'-[NavController setItems::]:未识别的选择器已发送>到实例0xc217a00' *第一次抛出调用堆栈: (0x14b8022 0xeb8cd6 0x14b9cbd 0x141eed0 0x141ecb2 0x3fbe 0xe2a1e 0x41401 0x41670 0x41836>0xbfc9dd8 0x4872a 0x19596 0x1a274 0x29183 0x29c38 0x1d634 0x13a2ef5 0x148c195 0x13f0ff2>0x13ef8da 0x13eed84 0x13eec9b 0x19c65 0x1b626 0x1d40 0x1cd9) 终止引发异常的调用

我认为我理解错误在于NavController.m,其中:

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSString* path = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];
    MasterViewController* root = (MasterViewController*)self.topViewController;
    NSDictionary* thelist = [NSDictionary dictionaryWithContentsOfFile:path];
    root.items = [thelist objectForKey:@"Items"];
    root.navigationItem.title = [thelist objectForKey:@"name"];
}

顺便说一句,我制作了如下数组项:(非原子,保留)NSArray*项

问题可能在这里:

MasterViewController* root = (MasterViewController*)self.topViewController;

self.topViewController
可能不是MasterViewController的实例,而是NavController实例。应用程序崩溃,原因如下:

root.items = [thelist objectForKey:@"Items"];
这一行只是书写的快捷方式:

[root setItems:[thelist objectForKey:@"Items"]];
运行时抱怨没有找到方法
setItems:
。出现编译错误的原因是,您告诉编译器
root
属于
MasterViewController
类,但事实并非如此。在运行时,obj-c运行时发现
root
实际上是类
NavController
,似乎
NavController
没有
setItems:
方法

换句话说,这一行是错误的:

MasterViewController* root = (MasterViewController*)self.topViewController;

你在课堂上撒谎
self.topViewController
返回属于类
NavController
的对象,但是,您强制编译器将其视为
MasterViewController
,一旦调用
NavController

未找到的方法,就会失败,因此我必须将
MasterViewController*root
更改为
NavController
?setItems方法将如何实现?很抱歉这个可能很愚蠢的问题。@user1738193我不知道您项目的全部代码,也不知道您在引用的方法中试图做什么,我刚刚通知您topViewController不是MasterViewController。如果您说应该是一个,那么您的错误就在其他地方(例如,您在interface builder中或代码中的其他地方为该属性分配了错误的对象)。结果发现问题在interface builder中。我把它,MasterViewController,分配到了错误的视图。谢谢你的帮助。