2009-09-03 77 views
0

我有一个在三个subUIViews 1,2,3中的uiscrollview。我动态加载subUIView1,2,3的内容。下面是步骤iPhone Dev:无效的上下文CGContextDrawLayerInRect

  1. 我创建滚动视图与这3个 subUIview并为每个subUIView
  2. 我每个subUIView创建操作的默认大小 ,让我们说运行1,2,3。添加到操作队列

  3. 每个操作(操作1)计算稍后将在相关subUIView(子视图1)中绘制的内容。计算完成后,创建CGLayer并将其与UISubview1附加在一起。重置所有UIsubviews框架和绑定和布局scrollview子视图和setNeedDisplay相关的subUIview1。然后移动到下一个操作

  4. 在SubUIView drawRect方法中,我调用了CGLayerDrawInRect。

然后occasionly我 得到这个错误,无效的上下文。 有时,它工作正常,没有错误某些时候它发生了

Any idea about this error will be welcome. 

回答

1

花费很长时间才能进行调试,最终发现问题并解决问题。这里是东西

  1. 当操作1 setNeedDisplay送出,drawRect中还没有叫
  2. 一旦drawRect中被调用,操作2已运行期间运行的drawRect,操作2以某种方式改变subview1,2,3,布局和框架在同一时间。
  3. 所以,坏的事情发生了,上下文将变得无效当时因为框架正在发生变化,也最差,您可能会收到exe_bad_access假消息
  4. 解决方案,我设置了葛以确保操作1 drawRect中完成然后让操作2开始运行。

    我不得不说,XCode是可怕的开发工具,比较MS studio工具。它会随机给出无效的Context或exe_bad_access等消息。我们可怜的开发人员的生产力在哪里?但是,Iphone OSX比MS windows mobile好得多。这就是为什么我正在努力创造性地使用XCode。