1

それで、私はこれに関連する SOを読んでいました。

destinationViewController のヘッダー ファイルにプロパティを追加しました。

@property (nonatomic, strong) NSString *incomingSegue;

そして、destinationViewController の実装ファイルで合成しました。

@synthesize incomingSegue = _incomingSegue;

sourceViewController の prepareForSegue メソッドに次の行を追加しました (どちらがセグエをトリガーしているかによって異なります)。

[segue.destinationViewController setIncomingSegue:@"edit"];
[segue.destinationViewController setIncomingSegue:@"add"];

最後に、destinationViewController の実装ファイルにどの値が設定されているかを確認するプロセスがあります。

if (_incomingSegue == @"add")
    {
        //snipped code here
    }
    else if (_incomingSegue == @"edit")
    {
        //snipped code here
    }

だから、明らかに私は何かが欠けています。セグエを実行しようとすると、SO で約 1000 回表示されるエラーが発生するため、見落とした詳細を特定するのがかなり難しくなります。これは、sourceViewController の prepareForSegue メソッドで (ブレークポイントに従って) トリガーされます。

認識できないセレクターがインスタンスに送信されました

(NSString *) の代わりにリテラル文字列 (@"string") を使用することはできませんか、それともエラーをスローする何か他のものですか?

更新(解決済み):

私の prepareForSegue メソッドの詳細な説明:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"editSegue"])
    {
        //snipped
        [segue.destinationViewController setIncomingSegue:@"edit"];
    }

    else if ([[segue identifier] isEqualToString:@"addSegue"])
    {
        //snipped
        DestinationViewController *dtv = (DestinationViewController *)[[segue destinationViewController]topViewController];
        [dvc setIncomingSegue:@"add"]
    }
}

結局のところ、宣言した DestinationViewController クラス オブジェクトを使用して値を設定する必要がありました。editSegue で行ったように、単に segue.destinationViewController を参照する代わりに。editSegue 用に宣言された DestinationViewController クラス オブジェクトを持っていないため、意図したとおりに動作していました/動作しています。

4

2 に答える 2

1

着信セグエを設定する行の周りに条件を追加する必要があります。

if ([segue.identifier isEqualToString:@"SegueToControllerThatSupportsIncomingSegue"]) {
    [segue.destinationViewController setIncomingSegue:@"edit"];
}

setIncomingSegue:アイデアは、追加したメソッドをサポートする宛先ビュー コントローラーでのみ呼び出すことです。

また、宛先ビュー コントローラーのコードを変更して、文字列の等価性をチェックする必要があります。isEqualToString:

if ([_incomingSegue isEqualToString:@"add"])
{
    //snipped code here
}
else if ([_incomingSegue isEqualToString:@"edit"])
{
    //snipped code here
}
于 2012-12-12T01:31:57.753 に答える
0

電話すると @synthesize incomingSegue = _incomingSegue;

あなたは本当に電話するだけです

@synthesize incomingSegue;

于 2016-03-10T03:06:35.250 に答える