2012-06-20 37 views
1

我不確定這是否與我的問題有關,但我會從頭開始:在我的項目中,我有一個視圖控制器,它是按類名動態實例化的,如下所示:部署到設備結果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。然後它在我身上發現someViewControllerUSED是一個UITableViewController,並且會實現tableView:numberOfRowsInSection:

無論如何;從應用程序中刪除應用程序並讓XCode部署一個乾淨的副本來解決問題。

我想知道的是,爲什麼?怎麼樣?我想我已經知道了一段時間,XCode在部署時會做些時髦的事情 - 在部署的捆綁包中的舊資源從項目中刪除之後,我遇到了問題。但我不會期望有Objective-C類型的問題。

回答

0

重命名一個.h和.m文件,然後引入一個新的同名的.h和.m會導致問題。不是xcode,而是你。最好的辦法是將文件複製到像/ tmp這樣的目錄中,將它們從項目中刪除,然後將它們作爲新名稱添加到項目中,使用不同的名稱。清楚地說明了

+0

。我想明白爲什麼,以及這個問題是否記錄在某個地方。 – TomSwift