2012-10-18 85 views
1

我已經編寫了一些用於鑽取表格應用程序的代碼,但是應用程序僅在運行時崩潰。 Xcode在構建應用程序時不會給我任何錯誤。調試器輸出:在運行時調試時出現故障

2012年10月18日10:58:26.513秒[474:C07] - [NavController setItems:]:無法識別選擇>發送到實例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 *物品;

回答

0

應用崩潰,因爲下面一行:

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未找到的方法,該對象就會失敗。

+0

因此,我將不得不將'MasterViewController * root'更改爲'NavController'? setItems方法將如何實現?對不起,可能是愚蠢的問題。 – user1738193

+0

@ user1738193我不知道你的項目的全部代碼以及你在引用方法中想要做什麼,我只是告訴你,topViewController不是MasterViewController。如果你說它應該是一個,那麼你的錯誤是在其他地方(例如,你在界面生成器或代碼中的其他地方將錯誤的對象分配給了這個屬性)。 – Mecki

+0

事實證明,問題出在界面構建器中。我將它分配給MasterViewController,使其顯示錯誤。感謝所有的幫助。 – user1738193

0

這個問題可能是在這裏:

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

self.topViewController是proably不是MasterViewController的實例,但NavController實例,你去那裏。