У меня возникли проблемы с приложением, которое прерывается с перерывами. Код ниже в UIView с CATiledLayer как его защитным слоем:Прерывистое исключение EXC_BAD_ACCESS с CATitledLayer
- (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. См. tech note. Моя проблема (я думаю), кажется, проблема с потоком. Неужели UIKit нельзя винить?
Что происходит, когда вы пересчитывать тракту каждый раз, и никогда не храните его в переменной (которая может быть не поточно-)? – sch
Это, похоже, сработало. Проблема только в том, как мне передать другой путь к моему drawRect? Мой пример был тривиализирован для легкого чтения, но моей программе необходимо установить свойство self.path, которое тогда нужно нарисовать –