Ошибка подачи какао: <Error>: doClip: пустой путь - PullRequest
4 голосов
/ 11 июня 2010

Какао выдает ошибку:

Thu Jun 10 19:13:56 myComputer.local myApp[####] <Error>: doClip: empty path.

Но у меня нет нигде этой функции в моем коде (не могу найти с помощью поиска в рамках / проекте) ... Кажется, многие жалуются наэто потому, что он входит в журналы консоли, но не может найти никаких причин, объясняющих причины его возникновения на прогматическом уровне.

Есть мысли о том, в чем проблема?

Ответы [ 4 ]

6 голосов
/ 06 августа 2011

Я бы просто проверил, пуст ли путь, используя: CGContextIsPathEmpty (CGContextRef ctx)

Пример:

if(!CGContextIsPathEmpty(c))
    CGContextClip(c);
3 голосов
/ 11 июня 2010

Изучая дамп класса и nm, я обнаружил, что это функция в CoreGraphics (Quartz 2D).Он не объявлен в заголовках, поэтому это частная функция.

Разбить doClip в отладчике, затем переместиться вниз по стеку и посмотреть, рисует ли какой-либо код в это время.Если это так, вы, вероятно, пытаетесь обрезать пустой путь.Если используется сторонний фреймворк, вы должны сообщить об ошибке его авторам.

Если вы не вызываете его (и не должны делать), а сторонний фреймворкне имеет значения, это, вероятно, ошибка в одной из платформ Apple.Вы должны сообщить об этом в Apple .

1 голос
/ 02 августа 2011

У меня была такая же проблема, когда я реализовал следующие методы, чтобы установить переопределение изображения на панели навигации, специфичное для альбомной ориентации. Чтобы избавиться от ошибки клипа, я закомментировал часть кода CGContextClip, как показано ниже:

@implementation UINavigationBar(CustomBackground)

+ (UIImage *) bgImagePortrait
{
    static UIImage *image = nil;
    if (image == nil) {
        image = [[UIImage imageNamed:@"iPhoneHeader_portrait"] retain];
}
    return image;
}

+ (UIImage *) bgImageLandscape
{
    static UIImage *image = nil;
    if (image == nil) {
    image = [[UIImage imageNamed:@"iPhoneHeader_landscape"] retain];
    }
    return image;
}

- (void) drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
    if ([self isMemberOfClass:[UINavigationBar class]] == NO) {
    return;
}
    UIImage *image = (self.frame.size.width > 320) ?
    [UINavigationBar bgImageLandscape] : [UINavigationBar bgImagePortrait];
    //CGContextClip(ctx); // Causes '<Error>: doClip: empty path.' error when changing views.
    CGContextTranslateCTM(ctx, 0, image.size.height);
    CGContextScaleCTM(ctx, 1.0, -1.0);
    CGContextDrawImage(ctx, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
}

@end
1 голос
/ 11 марта 2011

Я видел эту ошибку раньше, когда рисовал в контексте и пытался обрезать ее.Вы делаете какой-либо контекстный рисунок, как этот?

CGContextClip(ctx);
CGContextTranslateCTM(ctx, 0, image.size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
CGContextDrawImage(ctx, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...