長いタイトルで申し訳ありませんが、Google検索ではっきりと見たいと思いました。また、これは、「null」識別子を指定するのではなく、実際に存在する識別子を指定するという点で、他の多くの同様の質問とは異なります。
基本的に、Table View Controllerのセルの1つを使用してナビゲートして別のビュー(そのビューが何であれ)に移行しようとすると、問題が発生します。
ほとんどの人は、「To-Doリスト」のAppleチュートリアルを読み、目的に関係なくセルが同じ動きで動作することを期待した後にこの問題に遭遇します。この問題はおそらく単純ですほとんどの人にとって、初心者にとっては非常に難しいので、3時間ほどかかりました。
基本的にエラーは次のとおりです。
invalid nib registered for identifier (prototypeCell) - nib must contain exactly one top level object which must be a UITableViewCell instance
ここで、「prototypeCell」はセルが呼び出されるものです。これは、アプリの起動時にすぐに発生する例外です。
上記と同じ問題がありましたが、ストーリーボードを使用しておらず、問題が突然発生しました。
ソリューションがTableViewセルファイルにあることがわかりました。 Uibuttonを追加しましたが、誤ってセルの境界外に追加されていました。これは、uiviewの余分なビューのようなものであることを意味していました。
それを見つけてこの余分なビューを削除すると、問題はすぐに消えました。
このエラーが発生した場合は、誤って追加されたビューとオブジェクトについてuitableviewcellを確認してください
Simon_smileyの答えは正しい方向を指し示しましたが、次の解決策を導くためにさらに試行錯誤が必要でした。
この問題は、追加のトップレベルUIViewオブジェクトだけでなく、ジェスチャー認識機能でも発生します。そのため、失敗したXIBファイルでジェスチャレコグナイザーを使用しないでください。代わりにコードでセットアップできます。
たとえば、受け入れられた回答のコメントでvahotmが指摘しているように、awakeFromNib
でそれを行うことができます。
同じ問題がありました!そして私の場合、カスタムセルはUITableViewCellではなくUIViewのサブクラスでした。そのため、UIViewをUITableViewCellに置き換えると問題が修正されました!
UITapGestureRecognizer
のサブビューにContentView
をドラッグアンドドロップするため、同じ問題が発生します。削除するだけです。
問題は、ストーリーボードに同じ名前の複数のセルがあることです。単一のテーブルビューの場合など、同じ識別子を持つ複数のセルがあります。私の場合、「prototypeCell」と呼ばれる3つのセルがありました。
修正は実際には非常に簡単です。すべてのセルについて、最後にセル番号を付けた単純な名前を付けます。このセル番号は、後でindexPath.rowと一致する必要があるため、基本的には0から始まります。
例えば:
prototypeCell0
prototypeCell1
prototypeCell2
次に、コントローラーを担当するクラスに移動し、関数を見つけます
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
次に、コードを置き換えます。
static NSString *CellIdentifier = @"PrototypeCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
コードで:
static NSString *CellIdentifier = @"ListPrototypeCell";
NSString* num = [NSString stringWithFormat:@"%d", indexPath.row];
NSString* actual = [CellIdentifier stringByAppendingString:num];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:actual forIndexPath:indexPath];
他のすべては同じままです。このコードは基本的に行番号を取得し、それを識別子ベースに追加し、その文字列を使用してテーブルからセルを取得します。したがって、異なる行番号に応答する場合、異なるセルを返します。
明確にするために、問題に対する私の全体の機能は次のとおりです。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ListPrototypeCell";
NSString* num = [NSString stringWithFormat:@"%d", indexPath.row];
NSString* actual = [CellIdentifier stringByAppendingString:num];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:actual forIndexPath:indexPath];
cell.textLabel.text = self.content[indexPath.row];
return cell;
}
がんばろう!
また、これは私の最初のアンサー/質問のコンボですので、私はそれにどうやってアプローチするのか本当にわかりません。ありがとう!
ストーリーボードを使用し、その中にcollectionViewとcollectionViewもある場合があります。その後、ストーリーボードを単純化し、セルを別のペン先に分割することにします。空のペン先、Ctrl+C
ストーリーボードから-> Ctrl+V
ペン先に。
すべてが正常に見えますが、キャッチされない例外 'NSInternalInconsistencyException'によるアプリの終了が発生します。理由: '無効なnibは識別子(PrettyCollectionViewCell)に登録されていますUICollectionReusableViewインスタンスである必要があります '
回答:これをしないでください。ストーリーボードで行ったようにペン先をきれいにし、すべての要素を追加した後、修正しました。
xCode IBのバグ-バージョン7.3.1(7D1014)
私はグーパーのために愚かな解決策を提示します...
これは私の個人的な愚かな間違いでした-テーブルビューの新しいカスタムセルを作成したとき、プロジェクトの最上位ディレクトリに移動しました->新しいファイルを追加-> OS Xの下に空のファイルタイプを作成しましたiOSセクションではなくセクション。
うまくいけば、ほとんどの人が恥ずかしくないので、上記の他の問題を抱えています:P
このエラーの主な原因は、誤って追加された余分なビューです。 .xibファイルを見て、誤って追加された不要なビューを確認してください。それを削除すると完璧に動作します。 これがどのように見えるか で不要なビューをチェックできます
この問題があり、CollectionViewCellサブクラスの代わりにUITableViewCellサブクラスを作成したことが最終的にわかりました。それは夕方で、私は疲れていました、笑。 MNGで修正しました。
これを解決するには、インターフェイスビルダーのクラス名を、インターフェイスビルダーの(そのクラスの)セル再利用識別子と一致するように設定します。
注:クラスと識別子を同じにする必要はありません。対応するビューとバッキングモデルをリンクする必要があると言います。
それは私の側の愚かな間違いであり、このエラーを引き起こした2つのテーブルビューセルがありました。問題を修正した他の「テーブルビューセル」を削除しました。