1

アプリを「iPhone 6.0 Simulator」で実行すると、この奇妙な動作が発生します。1 回目は正常に実行されますが、2 回目は次のエラーでクラッシュします。

loaded the "IouView" nib but the view outlet was not set.'

これは再現可能であり、1 回おきに動作し、その逆の場合はクラッシュします。ここに私のアプリの構造があります:

AppDelegate で:

self.iouViewController = [[IouViewController alloc] initWithNibName:@"IouView" bundle:nil];
    [iouViewController setIouTableArray:iouTableArray];
    navController = [[UINavigationController alloc] initWithRootViewController:self.iouViewController];
    [window setRootViewController:navController];

次に、IouViewController.h で:

@property (strong, nonatomic) IBOutlet UITableView *iouTableView;

今日まで、私は常に自分のビュー (tableView など) をプログラムでコーディングしてきました。iPhone 5 の画面が 4 インチになったので、Apple と戦うのをやめて、「自動レイアウト」機能とともに IB を使用することにしました。

私の IouView.xib では、これは構造です。

Objects: 'View', 
  Referencing Outlets: view - File's Owner

Objects: 'View'->'Table View'
  Outlets: dataSource - File's Owner
  Outlets: delegate - File's Owner
  Referencing Outlets: iouTableView - File's Owner

実際にはビュー内に別のテーブル ビューがありますが、ここには含めませんでした。進め方が分からないので助けてください!どうもありがとう。

ビューコントローラーを正しく初期化していない可能性があるため、「loadView」をコメントアウトして、これをinitとして使用します。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {

    }

    return self;
}

PS: Apple LLVM 4.1 と ARC を有効にした iOS 6 SDK でビルドしています。

更新: IB からの画像が追加されました: 画像1 画像2 画像3 画像4

まだ迷っていますが、さらにコードが必要な場合はお知らせください。シンプルなナビゲーション コントローラーを使用して新しいプロジェクトを作成しましたが、その新しいプロジェクトでは機能しますが、私のものでは機能しません。クラッシュはシミュレーターにあります。

4

1 に答える 1

-1

シミュレーターをもうクラッシュさせない解決策を見つけたと思います。私は最初のビューだけを通過しました。これが私がした「こと」です。誰かが洞察を持っている場合は、共有してもらい、他の人にも役立つことを願っています. 助けてくれた Carl Veazey に感謝します。

私が言及するのを忘れていたのは、このコードが ARC のない iOS4 の時代にさかのぼって作成されたことです。私が切り替えたとき、多くの変化がありました。

Carl の提案に従って、'Build Phases' -> 'Compile Sources' を見て、IouView.xib を見ました。ということで、一つ削除。プログラムを実行すると、黒い画面が表示されます。最後に、main.m を見ました。

オリジナル:

@autoreleasepool {
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    return retVal;
}

次のように変更します。

@autoreleasepool {
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([IouApp2AppDelegate class]));
}

AppDelegate を #import する必要があります。その変更を行った後、プログラムを複数回実行でき、クラッシュしませんでした。

于 2012-09-27T22:41:23.627 に答える