それで、私はこれに関連する 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 クラス オブジェクトを持っていないため、意図したとおりに動作していました/動作しています。