5

これは非常に新人かもしれませんが...

識別子 を使用しViewControllersて、の 2 つの間にセグエを設定しました。StoryboardclickBtn

今、私は自分のコードでこのように呼んでいます:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"clickBtn"])
    {
        if(conditionVerified)
        {
            SecondViewController *controller = (SecondViewController *)segue.destinationViewController;
            [controller setManagedObjectContext:self.managedObjectContext];
        }
        else
        {
            // If I enter here I get the error below
        }
    }
}

キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '+entityForName: nil は、エンティティ名 'Link' を検索する正当な NSManagedObjectContext パラメータではありません

実際、else ステートメントに入ると、この遷移を実行したくありません。その方法は?

4

5 に答える 5

16

オプションで遷移を抑制するには、実装します

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender

状態に応じて、YESまたはを返します。NOあなたの例では:

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
    if ([identifier isEqualToString:@"clickBtn"])  {
        return conditionVerified;
    } else {
        return YES;
    }
}

遷移を抑制するにprepareForSegue:は「遅すぎる」。

于 2013-11-05T22:08:51.460 に答える
7

ボタンにセグエを実行させるのではなく、次のようなメソッドを呼び出します。

-(IBAction)mySegueButtonMethod:(id)sender
{
   if(conditionVerified){
      [self performSegueWithIdentifier:@"clickBtn" sender:sender];
   }
   else{
        // do not perform segue and do other relevant actions.
   }
}

表示されているエラーは、コントローラーがコンテキストマネージャーを nil にしない必要があるものを呼び出していると想定しているためです。

メソッドの最後で常にセグエが実行されるため、メソッド prepareForSegue に入ると、セグエの発生を実際に停止することはできません。

于 2013-11-05T22:02:59.007 に答える
2

これを試してみてください。うまくいきました!

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
    if ([identifier isEqualToString:@"Login"] && condition )
        { 
            return YES;
        }
        else if ([identifier isEqualToString:@"SignUp"])
        {
            return YES;
        }
        else
        {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"OOPS!!" message:@"Incorrect Username Or Password" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",nil];

            return NO;
        }

    }
     return YES;
}
于 2015-06-16T06:42:39.247 に答える