2013-04-21 72 views
1

我有两个UIView子类,比如说“Class A”和“Class B”。类A在其初始化程序中,代码为[self addSubview:instanceOfClassB];。而在B类的drawRect:是代码行[self addSubview:imageViewInstance];。同样在B类的drawRect:中,我将值分配给该imageView实例的animationImages,animationDurationanimationRepeatCount属性。但是,我也在此UIImageView实例上调用startAnimating,但它总是使应用程序崩溃。然后,我尝试从乙级的上海华盈的drawRect:是UIImageView的实例调用startAnimating,A级。但是,它仍然与错误崩溃:在drawRect之后有没有直接调用的方法?

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '* -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

而且具有“主题1:信号SIGABRT”上线消息代码为[imageView startAnimating];

我怀疑它在这里崩溃,因为B类的drawRect正在类的drawRect之后调用,所以,当我告诉图像视图启动动画崩溃,因为图像观点尚未创建。 所以基本上我问的是在什么方法可以告诉图像视图开始动画没有崩溃

+0

您可以添加异常断点以查看代码崩溃的位置:http://developer.apple.com/library/ios/#recipes/xcode_help-breakpoint_navigator/articles/adding_an_exception_breakpoint.html – 2013-04-21 07:11:56

+0

@weichsel - 我已经确定它在哪里崩溃;问题是我无法找到一种替代方法来完成我上面描述的内容。 – pasawaya 2013-04-21 07:15:26

+0

问题 - 为什么在drawRect中添加imageViewInstance?为什么不在init方法中? – 2013-04-21 07:21:03

回答

2

drawRect:中修改状态或调用与绘图无关的方法听起来像是一个非常糟糕的主意 - 除了绘图之外,您不应该在drawRect:中执行任何操作。

drawRect:会在视图或视图的一部分需要重新绘制时自动调用。重绘操作的​​频率和顺序由系统决定,并取决于几件事情(视图层次结构,遮挡,...) - 因此,您也不能依赖调用drawRect:的特定顺序。

您可以将对象的设置移出绘图代码,并根据用户交互开始动画。

+0

哈哈,我想,伟大的思想家都会这么想。我更喜欢你的措辞,所以我会删除我的答案。 – jrturton 2013-04-21 07:34:43

+0

如果我以前见过你的 - 没有回答 - 它基本上是一样的:) – 2013-04-21 07:45:40

+0

@weichsel - 谢谢你的回答,但是我的目标是在视图加载时开始动画,而不是在用户提示时开始。无论如何要这样做? – pasawaya 2013-04-21 14:26:33

相关问题