web-dev-qa-db-ja.com

nibが、UITableViewを取得しませんでした

私のアプリケーションはiOS 5.1で動作しますが、iOS 6シミュレーターでは次のエラーが発生します。

キャッチされない例外 'NSInternalInconsistencyException'によるアプリの終了、理由: '-[UITableViewController loadView]は "MainListViewController"ペン先をロードしましたが、UITableViewを取得しませんでした。

私はUITableViewControllerをサブクラス化していますが、変更したくありません。

テーブルビューはプログラムで作成され、MainListViewController.xib Tab Bar ControllerからロードするダミーのMainwindow.xibがあります。

また、MainListViewController.xibを削除し、MainWindow.xib Tab Bar Controllerから削除し、AppDelegateでMainListViewControllerを作成し、UITabBarItemとしてTab Bar Controllerに追加しようとしました。このペン先の問題を取り除きますが、同じエラーが表示されます。

57
irmu

UITableViewControllerサブクラスのNIBがある場合、そのviewアウトレット必須UITableViewに接続されます。

あなたは削除する権利がありますMainListViewController.xibそしてすべてをコードで実行しますが、ビルドと実行時に古いXIBが削除されないため、それが機能しなかったのはそのためです。そのため、シミュレーターからアプリを削除して、再試行してください。それで動作するはずです。

98
mattjgalloway

ストーリーボードを使用して同様の問題が発生しました。他の人のためにソリューションを投稿します。重要な点は、ファイルの所有者をUITableViewのサブクラスに正しく設定した場合、ビュープロパティがテーブルビューに設定されていることを確認する必要があることです。ストーリーボードを使用していますが、ペン先にも同じことが当てはまります。 「ドキュメントアウトライン」を展開して、ストーリーボードの階層を表示します。以下にいくつかのスクリーンショットを含めます。これを解決する簡単な方法は、ドキュメントのアウトラインでviewを確認することです。子として持っているテーブルビューを削除します。ビュープロパティの上に他のテーブルビューをドラッグします。できたスクリーンショットで紹介します。

enter image description here

2つのテーブルに注目してください。 table1とそのセルを削除します。

enter image description here

良い。ここで、table2をビューにドラッグすると完了です。今すぐ動作するはずです。基本的に、UITableViewControllerのサブクラスがある場合、ビューの代わりにテーブルビューが必要です。そうしないと、クラッシュします。

enter image description here

28
smileBot

その理由は次のとおりです。

.hファイルは、UIViewControllerのサブクラスであることを確認します。問題を解決します。

17
Abdul Yasin

つまり、カスタムUITableViewControllerサブクラスをUIViewControllerに設定しています!!これはできません。 UIViewControllerにUIViewControllerサブクラスを与える必要があります。

11
oabarca

UITableViewをトップビューとして使用する場合。

このような :

enter image description here

コントローラーでUITableViewControllerを使用する必要があります

class ItemsViewController: UITableViewController

StoryboatdのビューでUITableViewを使用する場合。

このような :

enter image description here

UITableControllerでUITableViewDelegateとUITableViewDataSourceを使用する必要があります

class ItemsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
10
saneryee

ストーリーボードと1つのテーブルビューを使用すると、解決策が見つかります。

重要なのは、カスタムクラス(newViewController)を作成するとき、それがUITableViewControllerのサブクラスであることを確認するだけです。作成したら(テーブルの)Table View Controllerに移動し、Identity Inspectorで前に作成したカスタムクラス(newViewController)を選択します。

それは私のために働く。私のコメントが誰かを助けることを願っています。

4
chadenis

View outlet.outletをUITableViewに接続する必要があるため、Table Viewを接続してください。

3

これが発生する理由はいくつかあります。

  1. UITableViewDelegateとUITableViewDataSourceを.hに追加していない可能性があります

    @interface TableController:UIViewController {

  2. 宣言したコンセントをStoryboard/Nibのコンポーネントに接続していない可能性があります

  3. UITableViewの代わりにUIViewControllerを呼び出すか、.hでバーサバーサを呼び出すことができます。

@interface TableController : UIViewController

または

 @interface TableController : UITableViewController 
3
Joe Barbour

私はこの問題を抱えていましたが、それを解決するのは簡単なことでした。

すでに作成している場合は、ペン先を保持してください...

(XIBファイル)に移動し、オブジェクトライブラリからtableViewコンポーネントをXIBファイルのiPhone画面に追加すると、動作するはずです:)

1
DevTorch

私は同じ問題を抱えており、無駄な3時間後にそれを見つけます...「これは間違いです」私はtableviewcontrollerクラスを使用し、viewcontrollerクラスの代わりにこのクラスのuiviewcontroller参照を与えますしたがって、tableviewcontrollerクラスを削除し、tableviewcontrollerクラスのコードを貼り付けて、コントローラークラスを表示します。その後、IDインスペクターのストーリーボードで「コード全体を貼り付けるだけでロジックを貼り付ける」では、現在のView Controllerクラスのクラス参照を提供します。

0
kanisht sahlot

この問題も発生しましたが、xcode 6.2でストーリーボードを使用しました。ストーリーボードから対応するビューを削除し、Table View Controllerをオブジェクトライブラリからストーリーボードに再度ドラッグすると、機能します。

0
Mengjie

@smileBotの答えは、解決策が非常に簡単であり、iOSによって発生したエラーが理にかなっていることに気付きました

キャッチされない例外 'NSInternalInconsistencyException'によるアプリの終了、理由: '-[UITableViewController loadView]は "MainListViewController"ペン先をロードしましたが、UITableViewを取得しませんでした。

彼らは基本的に、nibのView ControllerはUITableViewを返さないと言っています-ほとんどの場合、nibはViewを返します-これは、新しいViewControllerを作成するときにデフォルトで作成されますXcode IDE。

解決策は、それを削除するのと同じくらい簡単ですView-これは標準に反するかもしれません-しかし、先に進み、それを選択してバックスペース-次に、UIControllerをViewController内にドラッグアンドドロップすると、このUITableViewがTableViewController内のルートビュー。

これは、UITableViewControllerを直接サブクラス化するクラスにのみ必要です。

がんばろう。

0
Ryan

これは私のために働いた。お役に立てば幸いです。

AppDelegateで->

#import "TableViewController.h" // name of your TableViewController class

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//PUT
TableViewController *controller = [[TableViewController alloc]
                                  initWithStyle:UITableViewStylePlain];
    self.window = [[UIWindow alloc]
                   initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = controller;
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

    // Override point for customization after application launch.
    return YES;
}

ストーリーボードで、View Controllerがこのクラスを指していることを確認してください。

Story Board

0
uplearnedu.com