2010-06-11 7 views
3

Cocoa donne erreur:Cocoa donnant erreur: <Error>: doClip: chemin vide

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

Mais je ne l'ai pas cette fonction partout dans mon code (ne peut pas trouver en recherchant dans les cadres/projet) .. Il semble que beaucoup de gens se plaignent de cela parce que cela se retrouve dans les logs de la console, mais n'a pas pu trouver de raison pour expliquer ce qui le provoque au niveau progmatique.

Avez-vous des idées sur le problème?

Répondre

3

farfouillé avec classe et décharge nm, je trouve que c'est une fonction dans CoreGraphics (Quartz 2D). Ce n'est pas déclaré dans les en-têtes, donc c'est une fonction privée.

Pause sur doClip dans le débogueur, puis déplacez en bas de la pile et voir si l'un de votre code de dessin à ce moment-là. Si c'est le cas, vous essayez probablement de couper sur un chemin vide. Si un framework tiers que vous utilisez est impliqué, vous devez déposer un bug avec ses auteurs.

Si vous n'êtes pas l'appeler (et vous ne devriez pas), et un cadre tiers n'est pas mis en cause, il est probablement un bug dans l'un des cadres d'Apple. Vous devriez report it to Apple.

+0

Je ne sais pas quoi faire sur doClip ... ai-je tord? http://i259.photobucket.com/albums/hh299/PirateOrion/Screenshot2010-06-11at122913PM.png – BadPirate

+0

Vous le faites correctement, mais regardez la case à cocher: Le point d'arrêt n'est pas lié. Essayez de vous lier à ApplicationServices. Si cela ne vous aide pas, je suppose que la fonction est 'static' et ne peut donc pas être nommée dans un point d'arrêt. –

+2

J'ai découvert que vous pouvez déclencher le point d'arrêt si vous cassez CGPostError. – memmons

1

J'ai déjà vu cette erreur lorsque vous dessinez dans un contexte et que vous essayez de la découper. Est-ce que vous faites un dessin contextuel comme celui-ci?

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); 
+0

Non. C'était quelque chose de plus bas. Mais j'ai peur d'avoir déménagé :) – BadPirate

1

J'ai eu le même problème lorsque j'ai implémenté les méthodes suivantes pour définir le remplacement de l'image de barre de navigation spécifique pour l'orientation paysage. Pour se débarrasser de l'erreur clip je commentais la partie CGContextClip du code comme indiqué ci-dessous:

@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 
4

Je voudrais juste vérifier si le chemin est vide à l'aide: CGContextIsPathEmpty (CGContextRef CTX)

Exemple :

if(!CGContextIsPathEmpty(c)) 
    CGContextClip(c); 
Questions connexes