Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 将对象传递回并弹出两个视图控制器_Xcode - Fatal编程技术网

Xcode 将对象传递回并弹出两个视图控制器

Xcode 将对象传递回并弹出两个视图控制器,xcode,Xcode,我去年晚些时候开始学习Objective C和编程,我正在处理核心数据,所以我需要一些帮助 我试图在VC3中选择一个对象,并在按下“选择”按钮时将其传递给VC1。一旦按下,它就会弹出到VC1并在单元格中显示对象。我不认为我可以使用segue,因为我想返回,而不是前进。另外,我不会回到根视图控制器 除此之外,其他一切都适用于分段、协议和委托。我尝试过委托,但它们似乎不起作用,可能是因为它们之间有一个视图控制器或其他东西。然而,我对编程非常陌生,所以我可能错了。 如果您能提供帮助和指导,我将不胜感激

我去年晚些时候开始学习Objective C和编程,我正在处理核心数据,所以我需要一些帮助

我试图在VC3中选择一个对象,并在按下“选择”按钮时将其传递给VC1。一旦按下,它就会弹出到VC1并在单元格中显示对象。我不认为我可以使用segue,因为我想返回,而不是前进。另外,我不会回到根视图控制器

除此之外,其他一切都适用于分段、协议和委托。我尝试过委托,但它们似乎不起作用,可能是因为它们之间有一个视图控制器或其他东西。然而,我对编程非常陌生,所以我可能错了。
如果您能提供帮助和指导,我将不胜感激。

ios6+实现这一点的现代方法是使用一个放松段

您可以通过定义一个方法来创建其中之一,该方法接受storyBoardSegue的单个参数

- (IBAction)unwindOnSelect:(UIStoryboardSegue *)segue;
将此方法添加到要展开到的viewController

然后,在故事板场景中,您要从中释放。。。CTRL键从“选择”按钮拖动到场景底部栏中的绿色“退出”符号。展开段应作为选项出现在弹出窗口中。选择它。您的按钮会将您释放到该目的地,并且将执行unwind segue方法中的代码

segue对象同时持有对源和目标ViewController的引用,因此您可以通过这种方式将数据从一个ViewController获取到另一个ViewController

  - (void)unwindOnSelect:(UIStoryboardSegue *)segue
{

       self.myObject = segue.sourceViewController.myProperty;

}
这里可能会出现错误,选择器myProperty没有已知的实例方法。解决这个问题的一种方法是在VC1的.h或.m文件的顶部包含viewController3。您可能还需要进行打字:

       self.myObject = [(ViewController1*)segue.sourceViewController myProperty];
另一种方式是间接的:

if ([segue.sourceViewController respondsToSelector:@selector(myProperty)]) {
    self.myObject = [segue.sourceViewController performSelector:@selector(myProperty)];
     }

这样做的好处是您不必包括viewController3,因此您的耦合性更强,更客观一点。

为此,我要做的是在推到下一个VC之前,先将VC1的引用发送到VC2,然后再从VC2发送到VC3,当选择对象时,使用VC1的引用设置VC1中某个对象的值。如果您向我显示代码,我将发布确切的代码。@Muhammad感谢您的帮助Muhammad。不幸的是,我还没有针对这个问题的任何代码,因此出现了这个问题。然而,我想到了另一种方法,即不需要从VC3中选择,而是使用编辑控制选项,在原型中使用加号图像。谢谢你的segue放松方法