我不確定這是否與我的問題有關,但我會從頭開始:在我的項目中,我有一個視圖控制器,它是按類名動態實例化的,如下所示:部署到設備結果frankenstein二進制
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
USED是一個UITableViewController
,並且會實現tableView:numberOfRowsInSection:
。
無論如何;從應用程序中刪除應用程序並讓XCode部署一個乾淨的副本來解決問題。
我想知道的是,爲什麼?怎麼樣?我想我已經知道了一段時間,XCode在部署時會做些時髦的事情 - 在部署的捆綁包中的舊資源從項目中刪除之後,我遇到了問題。但我不會期望有Objective-C類型的問題。
。我想明白爲什麼,以及這個問題是否記錄在某個地方。 – TomSwift