prepareForSegue:如何设置if条件?

Rob*_*Rob 5 objective-c ios segue

这可能是新手,但......

我用标识符ViewControllers在我的两个之间设置了一个segue .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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'+ entityForName:nil不是合法的NSManagedObjectContext参数,用于搜索实体名称'Link''

事实上,如果我输入else语句,我不想​​进行这种转换.怎么办?

Mar*_*n R 16

要选择性地抑制转换,请执行

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
Run Code Online (Sandbox Code Playgroud)

并返回YESNO,根据您的情况.在你的例子中:

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

prepareForSegue:它是"为时已晚",以抑制过渡.


Ben*_*ery 7

它不是让按钮执行segue,而是调用如下方法.

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

你看到的错误是因为我假设控制器正在调用需要上下文管理器的东西不是零.

一旦进入方法prepareForSegue,就无法真正阻止segue发生,因为它总是在方法结束时执行segue.