Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.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
Iphone UIScrollView对象通过引用传递,未返回_Iphone_Ios_Uikit_Uiscrollview_Pass By Reference - Fatal编程技术网

Iphone UIScrollView对象通过引用传递,未返回

Iphone UIScrollView对象通过引用传递,未返回,iphone,ios,uikit,uiscrollview,pass-by-reference,Iphone,Ios,Uikit,Uiscrollview,Pass By Reference,我有一个场景,我有: 带有UIViewController(mainVC)和包含UIScrollView(scrollView)的UIView(mainView)的UINavigationController mainView中的一个全屏按钮,点击该按钮后会推送一个新的UIViewController(fullScreenVC),其中scrollView对象通过引用传递给它(存储时带有属性属性nonatomic和assign)。fullScreenVC正确显示scrollView对象 关闭fu

我有一个场景,我有:

  • 带有UIViewController(mainVC)和包含UIScrollView(scrollView)的UIView(mainView)的UINavigationController
  • mainView中的一个全屏按钮,点击该按钮后会推送一个新的UIViewController(fullScreenVC),其中scrollView对象通过引用传递给它(存储时带有属性属性nonatomic和assign)。fullScreenVC正确显示scrollView对象
  • 关闭fullScreenVC后,会向mainVC发送一个NSVC通知。问题就在这里
删除fullScreenVC后,scrollView不再显示在mainVC中。通过在通知期间在日志上打印scrollView,我可以看出它仍然存在

我原以为通过引用发送和存储scrollView,mainVC仍然可以保留它。我还尝试将scrollView发送回mainVC,以防它被删除,但没有任何效果


解决此问题的唯一方法是在通知步骤中将scrollView添加回mainVC。在发送UIScrollView对象(或更一般的UIKit对象)时,我是否需要做一些特殊的事情?还是我在什么地方做了什么蠢事?

没有间接参考。在Objective-C中,我们有指向对象的指针,这些指针被分配和传递(而不是对象本身)

无论如何,这在这里是不相关的。您的问题是,在UIKit中,一个视图只能有一个superview(它是一个树层次结构)。将一个视图作为子视图添加到另一个视图时,它将自动从其以前的超级视图(如果有)中删除。请参阅addSubview的文档:此处::


您真的需要在两个不同的屏幕上显示相同的滚动视图吗?这似乎有点奇怪。您应该有两个不同的滚动视图;或者,您可以确保在处理完另一个视图后将其添加回“主视图”。

啊,一个视图只能有一个superview是有道理的。我之所以在两个不同的屏幕中使用滚动,是因为在滚动视图中添加项目需要相当多的设置,我认为必须重新创建它是一种浪费。完成后,我将其添加回主视图。我认为通过引用传递和通过指针传递是一样的(与通过值传递相反,对象是通过值传递的)?也许这只是C/C++术语。