1

と がありSourceViewControllerDesViewControllerに変数がありますDesViewController: @property ( nonatomic , assign , readwrite ) NSString* name ;

しかし、 SourceViewController でメソッドを呼び出すと問題が発生します:

-(void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil ] ;
    DestinationViewController* desViewController = [storyboard instantiateInitialViewController ] ;
    desViewController.name = @"haah" ;
    [self presentViewController:desViewController animated:YES completion:nil ] ;
}

出力 :

'NSInvalidArgumentException', reason: '-[SourceViewController setName:]: unrecognized selector sent to instance 0x6a0d7c0'

誰でも私を助けてもらえますか?

4

3 に答える 3

1

以下のコード行:

[storyboard instantiateInitialViewController ] ;

SourceViewController を返します。これは、最初のviewControllerとして設定されているためです。ただし、あなたはそれを として扱っています DestinationViewController。したがって、問題。

初期コントローラーを変更するか、 のプロパティを宣言して合成しますSourceViewController

于 2012-06-27T04:33:54.923 に答える
0

現時点では、インスタンス化するviewcontrollerはDestinationViewcontrollerクラスではないようです(最初のviewControllerがそのクラスではないように見えるため)。したがって、そのプロパティはありません。正しいクラスをインスタンス化する必要があります (以下を参照)。また、DestinationViewcontroller の実装でプロパティを合成したかどうかも確認してください。

余談ですが、単に文字列変数を新しい値に代入したいだけかもしれませんが、ほとんどの場合、NStrings では代入の代わりにコピーを使用したいと思うでしょう。また、デフォルトの動作であるため、読み取り書き込みは必要ありません。したがって、プロパティ宣言を次のように変更することをお勧めします。

@property (nonatomic, copy) NSString *name;

実装では、たとえば次のように合成するかどうかを確認します。

@synthesize name = _name;

そしてあなたのdeallocで:

[_name release];

また、新しいプロジェクトを開始する場合は、ARC の使用を検討してください。

ここで、viewController を DestinationViewcontroller にすると、機能するはずです。取得する最良の方法は

DestinationViewcontroller *dc = [storyboard instantiateViewControllerWithIdentifier:@"identifier of your desviewcontroller"];
于 2012-06-27T06:35:15.213 に答える
0

SourceViewControllerからアクセスしようとしているときに、のプロパティを初期化していますDestinationViewController

のプロパティを作成する必要がありますDestinationViewController

于 2012-06-27T04:28:05.180 に答える