iphone Dev:无效的上下文CGContextDrawLayerInRect

时间:2009-09-03 17:06:17

标签: iphone

我在三个subUIViews 1,2,3中有一个uiscrollview。我动态地为subUIView1,2,3加载内容。这是步骤

  1. 我用这3个创建scrollview subUIview并具有默认大小 对于每个subUIView
  2. 我为每个subUIView创建一个操作,让我们说操作1,2,3。添加到操作队列

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

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

  5. 然后偶尔我     得到此错误无效的上下文。     有时,它工作正常,有时它没有错误

    Any idea about this error will be welcome.
    

1 个答案:

答案 0 :(得分:1)

花很长时间进行调试,最后找出问题并解决。这是事情

  1. 当操作1 setNeedDisplay发出时,drawRect尚未调用
  2. 一旦调用drawRect,操作2已经在运行,在drawRect运行期间,操作2以某种方式同时更改subview1,2,3,layout和frame。
  3. 所以,坏事发生了,因为帧正在改变,因此上下文将变为无效,而且最糟糕的是,你可能会收到exe_bad_access错误消息
  4. 解析解决方案,我设置了一个信号以确保操作1 drawRect完成然后让操作2开始运行。

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