web-dev-qa-db-ja.com

Xcode 4.5はXIBを破壊しますか?

新しいxcode 4.5を使用していますが、ビューコントローラーに次のコード行があります。

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はいくつかのAppleごみですか?

45
Dima

下の画像で強調表示されている「Use Autolayout」のチェックを外します。 Xcode 4.5では、プロジェクトに追加する新しいnibファイルに対してデフォルトでこのプロパティが有効になります。自動レイアウトチェックボックスをオフにすると問題が解決しました

59
aToz

これと同じ問題があり、ユーティリティのドキュメントインスペクターペインで[オートレイアウトを使用]チェックボックスをオフにして修正しました。

71
tomgerhardt

この問題が発生し、属性インスペクターでTitleフィールドがAttributedに設定されているUIButtonまで追跡しました。これをプレーンに変更すると、問題が修正されました。私が正しく覚えている場合、このボタンをXcodeの前のバージョンに追加し、そのときに問題が発生しました。

8
Symmetric

私にとっては、それはJason Cocoによるコメントとtomgerhardtによる回答の組み合わせでした。私のアプリはiOS5をターゲットとし、Xcode 4.5にアップグレードして新しいNIBを作成しました。デフォルトでは、これはiOS6をターゲットとしており、クラッシュを引き起こしていました。 NIBのファイルインスペクターウィンドウでこれをiOS5に設定しました。

次に、iOS5ではAutolayoutの使用がサポートされていないことを伝えるコンパイラエラーが表示され、ドキュメントインスペクターでそれが有効になり、問題が修正されました。

6
Asciiom

Xcode 4.5とiPhoneシミュレータ5.0を使用していますが、最初のテーブルが表示されたときも同じエラーが発生しました。 「autolayoutのチェックを外す」というアドバイスに従って、ドキュメントのバージョン管理をiOS 5.0に切り替えることで機能しました。 (ストーリーボードが選択されました->ファイルの識別タブ-> Interface Builderドキュメント->ドキュメントのバージョン管理。)AutoLayoutはすでに選択されていません。

4
Ben

すべての.xibファイルの自動レイアウトを無効にしても、エラーが発生しました。これは、.xibファイルのUILabelにText-> Attributedを使用したことが原因でした。

それをプレーンに設定した後、エラーはなくなりました。

2
Jasper

それで、これを理解しようとする約1時間後に、私は問題を理解しました。それは確かに上記のとおりです。xibがメインアプリの作成対象と同じターゲットバージョン(この場合は、おそらく6.0未満)に設定されていることを確認し、このオプションの[Use Autolayout]をオフにします特定の.xib。

シミュレータで機能する理由は、シミュレータが実際にiOS6を実行しているためです。古いiOSでデバイスを使用しようとすると、このエラーが発生します。私の問題は、デフォルトでiOS 6をターゲットとし、「自動レイアウトを使用する」がチェックされているカスタムTableViewCellを作成していたことです。これは私にとって犯人でした。

うまくいけば、このエラーで私が受けた悲しみを誰かに救うことができます!

2
CoBrA2168

「loadNibNamed:」の後の名前はnibファイルの名前でなければなりません(画面の左側にあるプロジェクトナビゲーター内)。CellForRowAtIndexPath(静的NSString ...)の最初から書き込む「セル識別子」を書き込むことがあります。 。

この小さな欠点であなたの問題かもしれませんか?

0
Vladimir