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这样的目录中,从项目中删除它们,然后用不同的名称将它们作为新文件添加到项目中。。我想了解原因,以及这个问题是否有记录在案。