-1

別の関数にあるこの行を実行しようとすると:

[self presentViewController:selectVC_ animated:YES completion:nil];

次のエラーが表示されます。

* キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: '* -[__NSArrayM insertObject:atIndex:]: オブジェクトを nil にすることはできません'

私の宣言とインスタンス化は同じファイルにあります

@class typesel_vc;
@interface
@property(nonatomic,strong)typesel_vc *selectVC;

@implementation 
@synthesize selectVC=selectVC_;

-(void)viewDidAppear:(BOOL)animated{
    selectVC_=[[typesel_vc alloc]init];
}

このエラーに対処する方法について何か考えはありますか?

編集:

presentViewController を呼び出す実際の行の直前に割り当てを配置しました

selectVC_=[[typesel_vc alloc]init];
[self presentViewController:selectVC_ animated:YES completion:nil];
4

2 に答える 2

3

まず、慣例により、クラス名は大文字で始める必要があります。

第 2 に、コントローラーのビューが読み込まれるときに、モーダル ビュー コントローラーを初期化して表示することは意味がありません。これは、プレゼンテーションの直前に行う必要があります。

第三に、投稿したコードからはエラーを特定できません。ログ ステートメントとブレークポイントを使用してコードをステップ実行し、nil オブジェクトが出現する場所を確認します。

于 2013-02-19T18:38:49.180 に答える
0

次のコード行を変更することで、この問題を解決できました。

selectVC_=[[typesel_vc alloc]init];
[self presentViewController:selectVC_ animated:YES completion:nil];

に:

selectVC_=[self.storyboard instantiateViewControllerWithIdentifier:@"typesel_vc"];
[self presentViewController:selectVC_ animated:YES completion:nil];
于 2013-02-19T19:53:36.373 に答える