2012-06-21 76 views
45

我使用新的Xcode 4.5, 我有一些代碼視圖控制器在這行:Xcode 4.5破壞XIBs?

DiscoverCell* cell=[table dequeueReusableCellWithIdentifier:@"DiscoverCell"]; 
if(cell==nil){ 
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"DiscoverCell" 
               owner:self 
               options:nil]; 
    cell = [nib objectAtIndex:0]; 
} 

當我運行的應用程序及其投擲:終止應用程序由於未捕獲的異常「NSInternalInconsistencyException」,原因:' NIB數據無效。' 在LoadNib行, 那是什麼?這個xcode是一些蘋果垃圾嗎?

+0

當我嘗試在iOS 5.1設備上嘗試啓動應用程序和內部NIB時,我遇到了同樣的問題...(當我在模擬器中啓動應用程序時,一切正常) 我的解決方法是使用Xcode 4.4 ... – Lindemann

+10

使用右側的文件實用程序面板,確保您的NIB的項目目標設置爲iOS 5,如果這是您的部署目標。默認情況下,這是在Xcode 4.5中的iOS 6項目中設置的,它將進行更改並以非後向兼容方式保存筆尖。將所有的筆尖更改爲實際的iOS版本以進行部署和保存。 –

+0

如果您使用的是iOS6,請確保看到此帖 http://stackoverflow.com/questions/12411980/enabling-auto-layout-in-ios-6-while-remaining-backwards-compatible-with- ios-5 – Kassem

回答

59

取消選中下圖中突出顯示的「使用Autolayout」。 Xcode 4.5默認爲您添加到項目中的新的nib文件啓用此屬性。取消選中的自動版式複選框解決了這個問題

+1

你救了我的命! – Andres

+0

@Andres歡迎您 – aToz

8

我剛剛遇到了這個問題,並將其跟蹤到了在屬性檢查器中將Title字段設置爲Attributed的UIButton。將其更改爲Plain可以解決問題。如果我沒有記錯的話,我在Xcode的最後一個版本中添加了這個按鈕,並且也遇到了麻煩。

+0

您只需要重寫標題,因爲更改爲普通紙時已清除,但所有字體和顏色設置均保留。 –

+0

那麼如果我需要它歸因呢? – Antzi

71

我有這個相同的問題,並通過取消選中實用工具中文檔檢查器窗格上的'使用Autolayout'複選框來修復它。

+0

真棒!這也幫助了我! – Stas

+0

已死 - 任何人都提交了錯誤報告? –

+0

非常感謝你:) –

6

對我來說,這是Jason Coco的評論和tomgerhardt的回答的結合:我的應用程序瞄準iOS5,我升級到Xcode 4.5並創建了一個新的NIB。默認情況下,這個目標iOS6,導致崩潰。我在NIB的文件檢查器窗口中將其設置爲iOS5。

然後我得到一個編譯器錯誤,告訴我使用Autolayout不支持iOS5,在文檔檢查器中打開它,我的問題已修復。

4

我正在使用Xcode 4.5和iPhone模擬器5.0,並且在顯示第一個表格時出現同樣的錯誤。在'取消自動佈局'建議之後,我通過將文檔版本控制切換到iOS 5.0來實現它。 (選擇故事板 - >文件識別選項卡 - >界面生成器文檔 - >文檔版本控制。)AutoLayout已被取消選擇。

2

因此,經過大約一個小時的試圖找出這個問題後,我發現了這個問題。確實如上所述:確保您的.xib設置爲與您的主應用程序編寫的目標版本相同的目標版本(在本例中,最有可能爲< 6.0),並取消選中此選項中的「使用Autolayout」特別是.xib。

它會在模擬器中工作的原因是因爲你的模擬器實際上是在運行iOS6。當試圖使用舊iOS設備時,會導致此錯誤。我的問題是,我創建了一個自定義的TableViewCell,默認情況下它是針對iOS 6的,並且已經選中了「Use Autolayout」。這是我的罪魁禍首。

希望我能夠拯救一個人在那裏的悲痛,我被通過這個錯誤!

2

禁用自動佈局我所有的.xib文件,我仍然有錯誤後。 這是由於我在.xib文件中使用了Text - > Attributed for UILabel。

將其設置爲平原後,該錯誤消失。

0

「loadNibNamed:」後面的名稱必須是nib文件的名稱(位於屏幕左側的項目導航器中),有時候人們會在其中寫入從CellForRowAtIndexPath(靜態NSString ...)。

可能是你在這個小故障中的問題?