Bug OS 3.0 ?
Bonjour à tous,
J'ai installé la version GM de l'OS 3.0 sur mon iPhone et j'ai découvert un bug dans mon application iPocket Draw que je n'avais pas détecté auparavant.
Mais comme il est facile à obtenir je suis très surpris.
Ce bug crash l'iPhone lors de l'utilisation de drawAtPoint avec une NSString pendant un zoom avant ou arrière
Les crashs sont aléatoires...
Le debbuger affiche :
0 WebCore::FontCache::purgeInactiveFontData
1 WebCore::FontCache::releaseFontData
2 WebCore::FontFallbackList::releaseFontData
3 WebCore::Font::~Font
4 -[NSString(WebStringDrawing) _web_drawAtPoint:forWidth:withFont:ellipsis:letterSpacing:includeEmoji:]
5 -[NSString(UIStringDrawing) drawAtPoint:forWidth:withFont:lineBreakMode:letterSpacing:includeEmoji:]
6 -[NSString(UIStringDrawing) drawAtPoint:withFont:]
7 -[TString drawincontext:] at TString.m:213
Moi ça ne me dit pas grand chose.
Dans mon code, j'ai ça :
Où letexte est la NSString contenant le texte de mon objet TString.
Merci pour vos lumières.
Eric
J'ai installé la version GM de l'OS 3.0 sur mon iPhone et j'ai découvert un bug dans mon application iPocket Draw que je n'avais pas détecté auparavant.
Mais comme il est facile à obtenir je suis très surpris.
Ce bug crash l'iPhone lors de l'utilisation de drawAtPoint avec une NSString pendant un zoom avant ou arrière
Les crashs sont aléatoires...
Le debbuger affiche :
0 WebCore::FontCache::purgeInactiveFontData
1 WebCore::FontCache::releaseFontData
2 WebCore::FontFallbackList::releaseFontData
3 WebCore::Font::~Font
4 -[NSString(WebStringDrawing) _web_drawAtPoint:forWidth:withFont:ellipsis:letterSpacing:includeEmoji:]
5 -[NSString(UIStringDrawing) drawAtPoint:forWidth:withFont:lineBreakMode:letterSpacing:includeEmoji:]
6 -[NSString(UIStringDrawing) drawAtPoint:withFont:]
7 -[TString drawincontext:] at TString.m:213
Moi ça ne me dit pas grand chose.
Dans mon code, j'ai ça :
CGContextSetTextDrawingMode (contex, kCGTextFillStroke);<br /> CGPoint pdepart = CGPointMake((x1 - delta_x) * zoomFactor, (y1 - delta_y) * zoomFactor);<br /> UIFont *font = [UIFont systemFontOfSize:[self textHeight] * zoomFactor];<br /> [letexte drawAtPoint:pdepart withFont:font];<br />
Où letexte est la NSString contenant le texte de mon objet TString.
Merci pour vos lumières.
Eric
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'ai moi même ouvert un ticket récemment (quand le wifi est activé, impossible d'envoyer un MMS, quand le wifi est désactivé ça marche), mais j'attends toujours un retour :P
Je vais devoir chercher.
Merci
Eric
Si je fais :
float mrel = [self textHeight] * zoomFactor;
UIFont *font = [UIFont systemFontOfSize:mrel];
J'ai le bug, par contre si je fais :
float mrel = [self textHeight] * zoomFactor;
int iSize = mrel;
UIFont *font = [UIFont systemFontOfSize:iSize];
Je ne l'ai pas mais le zooming sur les textes est saccadé bien sûr.
Pourtant le paramètre systemFontOfSize est bien un float, non ?
Eric
Si c'est systématique (que dès que tu passes ça plante mais un int ça plante pas) je te conseille fortement d'envoyer un bug à Apple.
Comme je n'obtiens pas le bug avec un integer, je me dis que le crash peut être provoqué par la fréquence trop élevée du changement de taille de la font.
J'essairai ce week-end en arrondissant la taille à une décimale.
Merci
Eric
J'ai donc fait un petit exemple de test qui montre ce crash.
Je dessine une string en incrémentant sa taille dans une boucle.
Ici sur le simulateur, j'ai le crash quand i = 118.
Pensez-vous que je doive l'envoyer à Apple ?
Merci
Eric
renvoie (null) car tu n'est pas dans une méthode drawRect:
Eric
Eric
Ce ne doit pas être rien pour le système de créer dans une simple boucle les 118 systemSizeOfFont ..., surtout si qu'il doit mettre tout cela en cache ...
Intégrer une NSAutoreleasePool dans ta boucle serait une bonne idée, du coup...
NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init];
en première ligne et :
[loopPool release];
en dernière.
Et ça crash pareil à i = 118.
Eric
J'ai cherché parmi les appli. que j'ai sur mon iPhone celles qui permettent de zoomer et Spreadsheet a le même bug.
J'ai donc soumis un rapport de bug à Apple. On verra bien.
Eric