Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
Objective c 克隆或复制UIViewController或UIView_Objective C_Uiview_Uiviewcontroller_Copy_Clone - Fatal编程技术网

Objective c 克隆或复制UIViewController或UIView

Objective c 克隆或复制UIViewController或UIView,objective-c,uiview,uiviewcontroller,copy,clone,Objective C,Uiview,Uiviewcontroller,Copy,Clone,UII我需要复制、自我控制或自我查看,我已尝试: UIView* viewOfSelf =[self.view copy]; UIViewController* controller = [self copy]; UIView* viewOfSelf =[self.view mutableCopy]; UIViewController* controller = [self mutableCopy]; 错误是: -[UIViewController mutableCopyWithZo

UII我需要复制、自我控制或自我查看,我已尝试:

UIView* viewOfSelf =[self.view copy];
UIViewController* controller = [self copy];

UIView* viewOfSelf =[self.view mutableCopy];
UIViewController* controller = [self mutableCopy];
错误是:

    -[UIViewController mutableCopyWithZone:]: unrecognized selector sent to instance 0xb803490
    -[UIView copyWithZone:]: unrecognized selector sent to instance 0x6e0acb0

对于要可复制的对象,它必须实现
NSCopying
协议,而
UIView
类和
UIViewController
类都不能实现

如果你想复制一个视图,我敢肯定你做错了什么。复制应该用可重用的
UIView
替换,就像在
UITableView
中使用
dequeueReusableCellWithIdentifier:
方法一样

复制视图控制器绝对是一种反模式。如果您希望获得已拥有的视图控制器的精确副本,请使用与当前视图控制器相同的参数创建视图控制器的新实例。

使用-

NSData *tempArchiveView = [NSKeyedArchiver archivedDataWithRootObject:self.view];
UIView *viewOfSelf = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveView];
同样地-

NSData *tempArchiveViewController = [NSKeyedArchiver archivedDataWithRootObject:self];
UIViewController *controller = [NSKeyedUnarchiver unarchiveObjectWithData:tempArchiveViewController];

不幸的是,我还不允许发表评论,但rishi的解决方案有一个问题:它不复制
NSLayoutConstraint
s。因此,如果您的任何视图使用autolayout,则不会复制这些视图。我正在编写一个小型库来解决这个问题,并将在完成后将其发布到github。不幸的是,我还没有找到一个现成的解决方案

//编辑


对不起,我之前写的不完全正确。我做了更多的研究,结果表明,默认情况下,归档视图中的
NSLayoutConstraint
s不会保存。但是,您实际上可以通过将约束的
shouldBeArchived
属性设置为
YES
来指定是否要存档约束。然后,即使在这个伪
copy
之后,您仍会在复制的视图中保留正确的约束。

什么是
self
的类<代码>MyViewController?尽管Rishi的回答对我也很有效,但我认为没有可更改的
UIView
UIViewController
副本,但创建新实例证明是解决我问题的更可靠的方法。谢谢没有得到所有东西,比如自定义手势等。嗯,没有得到我的UIImageView,我的UIImageView是我正在克隆的视图的子视图。