Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在弗兰肯斯坦二进制文件中部署到设备结果_Objective C_Ios_Xcode - Fatal编程技术网

Objective c 在弗兰肯斯坦二进制文件中部署到设备结果

Objective c 在弗兰肯斯坦二进制文件中部署到设备结果,objective-c,ios,xcode,Objective C,Ios,Xcode,我不确定这是否与我的问题相关,但我将从一开始开始:在我的项目中,我有一个视图控制器,它是按类名动态实例化的,如下所示: NSString* className; ...className is set to a valid class name, e.g. "someViewController" Class c = NSClassFromString( className ); UIViewController* vc = [[c alloc] init]; 在项目的当前构建中,some

我不确定这是否与我的问题相关,但我将从一开始开始:在我的项目中,我有一个视图控制器,它是按类名动态实例化的,如下所示:

NSString* className;

...className is set to a valid class name, e.g. "someViewController"

Class c = NSClassFromString( className );
UIViewController* vc = [[c alloc] init];
在项目的当前构建中,
someViewController
只是一个专门的UIViewController。但是,在项目的旧版本中(以前部署到我的设备上),类型为
someViewController
的视图控制器是专用的
UITableViewController

今天早上我花了很多时间试图理解为什么当我在设备上运行构建(从XCode部署)时,它会因为一个奇怪的调用堆栈和一条控制台消息而崩溃:

[someViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0xeb62a0
通过大量实验,我发现如果我将
someViewController
与任何其他视图控制器交换,我就无法重新解决问题。如果我将
someViewController
重命名为
someViewController2
,则无法重新设置问题。问题在于符号名
someViewController
。然后我突然意识到,
someViewController
曾经是一个
UITableViewController
,并且会实现
tableView:numberOfRowsInSection:

无论如何;从设备上删除应用程序并让XCode部署干净的副本修复了该问题


我想知道的是,为什么?怎样我想我早就知道XCode在部署时会做一些古怪的事情——我以前也遇到过这样的问题,即旧资源在从项目中删除后会留在部署包中。但我没想到Objective-C类型会出现问题

只需重命名.h和.m文件,然后使用相同的名称引入新的.h和.m文件,就会出现问题。不是为了xcode,而是为了你。最好是将文件复制到/tmp这样的目录中,从项目中删除它们,然后用不同的名称将它们作为新文件添加到项目中。

。我想了解原因,以及这个问题是否有记录在案。