2

UITableViewControllerのサブクラスに次のコードがあります。iOS 5.1では正常に動作しますが、iOS 6ではself.tableViewはnilです(シミュレーターと実際のデバイスの両方で)。私はそれを間違っていますか?initの直後にビューが設定されないのはなぜですか?

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];

    if (self) 
    {
        UIView * bck = [[UIView alloc] init];
        [bck setBackgroundColor:[UIColor whiteColor]];
        self.tableView.backgroundView = bck;
        [bck release];
    }

    return self;
}

編集:

私は問題を突き止めました:

私はクラスを持っています

AccountsListViewController_iPad

のサブクラスです

AccountsListViewController : UITableViewController

AccountsListViewControllerには、初期化後にtableViewとviewがロードされます(予想どおり)。一方、AccountsListViewController_iPadのviewとtableViewはnilに等しくなります。AccountsListViewController_iPadからすべてを削除したので、次のようになります。

.h
#import <UIKit/UIKit.h>
#import "AccountsListViewController.h"
@interface AccountsListViewController_iPad : AccountsListViewController
@end

.m
#import "AccountsListViewController_iPad.h"
@implementation AccountsListViewController_iPad
@end

それでも、ビューはゼロです。私の意見では、スーパークラスとまったく同じように動作するはずですが、そうではありません。

4

2 に答える 2

3

これは、ビューが読み込まれるまでテーブル ビューが読み込まれないためだと思われます。ビュー設定を に移動する必要がありますviewDidLoad

initメソッドで設定する必要がある唯一の「ビュー」プロパティは.navigationItem(UINavigationItemビューではなくコントローラーの一部と考えるのがおそらく最善だと思いますが)。

于 2012-09-18T11:01:12.563 に答える
2

わかりました、私はそれを解決しました:

AccountsListViewController_iPad クラスと、関連する AccountsListViewController_iPad.xib ファイルがありました。Xib は、コードのどこにも読み込まれておらず、xib のファイル所有者が AccountsListViewController_iPad ではないにもかかわらず、まだ読み込まれていました。何らかの理由で、xib のテーブル ビューがファイル所有者 (存在しない) のプロパティ 'table' に設定されたため、view と tableView は nil でした。

なぜ xib がロードされたのか、iOS 5.x で問題が発生したのかはまだわかりません。

于 2012-09-19T11:44:36.517 に答える