私のアプリケーションは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に追加しようとしました。このペン先の問題を取り除きますが、同じエラーが表示されます。
UITableViewController
サブクラスのNIBがある場合、そのview
アウトレット必須はUITableView
に接続されます。
あなたは削除する権利がありますMainListViewController.xib
そしてすべてをコードで実行しますが、ビルドと実行時に古いXIBが削除されないため、それが機能しなかったのはそのためです。そのため、シミュレーターからアプリを削除して、再試行してください。それで動作するはずです。
ストーリーボードを使用して同様の問題が発生しました。他の人のためにソリューションを投稿します。重要な点は、ファイルの所有者をUITableViewのサブクラスに正しく設定した場合、ビュープロパティがテーブルビューに設定されていることを確認する必要があることです。ストーリーボードを使用していますが、ペン先にも同じことが当てはまります。 「ドキュメントアウトライン」を展開して、ストーリーボードの階層を表示します。以下にいくつかのスクリーンショットを含めます。これを解決する簡単な方法は、ドキュメントのアウトラインでviewを確認することです。子として持っているテーブルビューを削除します。ビュープロパティの上に他のテーブルビューをドラッグします。できたスクリーンショットで紹介します。
2つのテーブルに注目してください。 table1とそのセルを削除します。
良い。ここで、table2をビューにドラッグすると完了です。今すぐ動作するはずです。基本的に、UITableViewControllerのサブクラスがある場合、ビューの代わりにテーブルビューが必要です。そうしないと、クラッシュします。
その理由は次のとおりです。
.hファイルは、UIViewControllerのサブクラスであることを確認します。問題を解決します。
つまり、カスタムUITableViewControllerサブクラスをUIViewControllerに設定しています!!これはできません。 UIViewControllerにUIViewControllerサブクラスを与える必要があります。
UITableViewをトップビューとして使用する場合。
このような :
コントローラーでUITableViewControllerを使用する必要があります
class ItemsViewController: UITableViewController
StoryboatdのビューでUITableViewを使用する場合。
このような :
UITableControllerでUITableViewDelegateとUITableViewDataSourceを使用する必要があります
class ItemsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
ストーリーボードと1つのテーブルビューを使用すると、解決策が見つかります。
重要なのは、カスタムクラス(newViewController)を作成するとき、それがUITableViewControllerのサブクラスであることを確認するだけです。作成したら(テーブルの)Table View Controllerに移動し、Identity Inspectorで前に作成したカスタムクラス(newViewController)を選択します。
それは私のために働く。私のコメントが誰かを助けることを願っています。
View outlet.outletをUITableViewに接続する必要があるため、Table Viewを接続してください。
これが発生する理由はいくつかあります。
UITableViewDelegateとUITableViewDataSourceを.hに追加していない可能性があります
@interface TableController:UIViewController {
宣言したコンセントをStoryboard/Nibのコンポーネントに接続していない可能性があります
UITableViewの代わりにUIViewControllerを呼び出すか、.hでバーサバーサを呼び出すことができます。
@interface TableController : UIViewController
または
@interface TableController : UITableViewController
私はこの問題を抱えていましたが、それを解決するのは簡単なことでした。
すでに作成している場合は、ペン先を保持してください...
(XIBファイル)に移動し、オブジェクトライブラリからtableViewコンポーネントをXIBファイルのiPhone画面に追加すると、動作するはずです:)
私は同じ問題を抱えており、無駄な3時間後にそれを見つけます...「これは間違いです」私はtableviewcontrollerクラスを使用し、viewcontrollerクラスの代わりにこのクラスのuiviewcontroller参照を与えますしたがって、tableviewcontrollerクラスを削除し、tableviewcontrollerクラスのコードを貼り付けて、コントローラークラスを表示します。その後、IDインスペクターのストーリーボードで「コード全体を貼り付けるだけでロジックを貼り付ける」では、現在のView Controllerクラスのクラス参照を提供します。
この問題も発生しましたが、xcode 6.2でストーリーボードを使用しました。ストーリーボードから対応するビューを削除し、Table View Controllerをオブジェクトライブラリからストーリーボードに再度ドラッグすると、機能します。
@smileBotの答えは、解決策が非常に簡単であり、iOSによって発生したエラーが理にかなっていることに気付きました
キャッチされない例外 'NSInternalInconsistencyException'によるアプリの終了、理由: '-[UITableViewController loadView]は "MainListViewController"ペン先をロードしましたが、UITableViewを取得しませんでした。
彼らは基本的に、nibのView ControllerはUITableViewを返さないと言っています-ほとんどの場合、nibはViewを返します-これは、新しいViewControllerを作成するときにデフォルトで作成されますXcode IDE。
解決策は、それを削除するのと同じくらい簡単ですView-これは標準に反するかもしれません-しかし、先に進み、それを選択してバックスペース-次に、UIControllerをViewController内にドラッグアンドドロップすると、このUITableViewがTableViewController内のルートビュー。
これは、UITableViewControllerを直接サブクラス化するクラスにのみ必要です。
がんばろう。
これは私のために働いた。お役に立てば幸いです。
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がこのクラスを指していることを確認してください。