2

断続的にクラッシュし続けるアプリで問題が発生しています。以下のコードは、CATiledLayer をバッキング レイヤーとして使用する UIView 内にあります。

- (UIBezierPath *)path
{
    if(_path == nil){

        _path = [UIBezierPath bezierPath];
        CGFloat lineWidth = 5;
        [_path setLineWidth:lineWidth];
        [_path setLineJoinStyle:kCGLineJoinRound];
        [_path setLineCapStyle:kCGLineCapRound];       

        [_path moveToPoint:CGPointMake(100, 100)];      
        [_path addLineToPoint:CGPointMake(200,200)];
        [_path addLineToPoint:CGPointMake(150,200)];
        [_path addLineToPoint:CGPointMake(50,400)];
        _path closePath];

        return _path;
    }    
return _path;
}

- (void)drawRect:(CGRect)rect
{  
    [[UIColor colorWithRed:0.1 green:0.1 blue:1 alpha:0.45] setStroke];//sets stroke color in current context
    [self.path stroke];
}

次のエラー コードが表示されます。

Single stepping until exit from function _ZN2CG4Path15apply_transformERK17CGAffineTransform, which has no line number information.

エラーが発生するパターンはないようです。スクロールやズームを行うと、ある時点で発生するようです。ズーム/スクロールするとすぐにクラッシュすることがあります。時々、クラッシュするまでしばらくズームしたりスクロールしたりできます。

iOS4 より前は、UIKit はスレッドセーフではなく、CATiledLayers では使用できませんでした。テクニカル ノートを参照してください私の問題 (だと思います) は、スレッドの問題のようです。確かに UIKit のせいではありませんか?

4

1 に答える 1

4

pathプロパティを作成してみてくださいatomic

また、おそらくdrawRect次のように変更する必要があります。

- (void)drawRect:(CGRect)rect
{  
    [[UIColor colorWithRed:0.1 green:0.1 blue:1 alpha:0.45] setStroke];//sets stroke color in current context
    @synchronized(self) {
        [self.path stroke];
    }
}
于 2012-02-24T07:24:52.033 に答える