我制作了一个MBTextViewController
的自定义ViewController。当我像这样制作这个类的实例时
self.topTextView = [[MBTextViewController alloc] initWithNibName:@"MBTextViewController" bundle:nil];
self.topTextView.view.frame = CGRectMake(0, 0, self.topTextView.view.frame.size.width, self.topTextView.view.frame.size.height);
[self.mainContainerView addSubview:self.topTextView.view];
它的工作做得很好,所有的泛客都很好。
但是,当我尝试在运行时实例化它时,当我尝试移动对象时应用程序崩溃了。
MBTextViewController *textView = [[MBTextViewController alloc] initWithNibName:@"MBTextViewController" bundle:nil];
textView.view.center = self.mainContainerView.center;
[self.mainContainerView addSubview:textView.view];
顺便说一句,这是我的panGuesture识别器功能
CGPoint translation = [panRecognizer translationInView:[self.view superview]];
CGPoint viewPosition = self.view.center;
viewPosition.x += translation.x;
viewPosition.y += translation.y;
self.view.center = viewPosition;
[panRecognizer setTranslation:CGPointZero inView:self.view];
任何人都可以帮忙。
提前致谢。
答案 0 :(得分:1)
错误访问会建议手势向已解除分配的对象发送消息。我认为当手势触发时,textView不再存在于内存中。在第一个例子中,textView是一个属性,即
html string
在第二个示例中,您只是创建一个很可能被解除分配的局部变量。再次将textView设为属性,看看是否有帮助。
当然,这都假定手势的委托是MBTextViewController。
答案 1 :(得分:1)
您还需要将视图控制器添加为子视图控制器。
MBTextViewController *textView = [[MBTextViewController alloc] initWithNibName:@"MBTextViewController" bundle:nil];
textView.view.center = self.mainContainerView.center;
[self addChildViewController:textView];
[self.mainContainerView addSubview:textView.view];
原因如下: 在方法中创建视图控制器时。视图控制器的分数仅限本地。当程序控制到达方法结束时,它会释放视图控制器。 iOS SDK鼓励为子视图添加子视图控制器。 在StoryBoard中使用ContainerView可以完成同样的事情。
答案 2 :(得分:0)
当您尝试获取手势回调时,请确保您的控制器已取消分配。当你像这样实例化控制器时:
MBTextViewController *textView = [[MBTextViewController alloc] initWithNibName:@"MBTextViewController" bundle:nil];
它仅保留在当前范围内,并在方法/函数结束时释放。这就是您遇到错误访问错误的原因。它需要至少有一个强大的参考来留在记忆中。制作textView
一个@property (strong)
可以解决问题