Bug OS 3.0 ?

Eric P.Eric P. Membre
16:16 modifié dans API UIKit #1
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 :
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

Réponses

  • AliGatorAliGator Membre, Modérateur
    16:16 modifié #2
    Je te conseille de tester que font n'est pas nil avant de faire ton appel, peut-être...?
  • Eric P.Eric P. Membre
    16:16 modifié #3
    Merci Aligator mais a priori ça n'est pas ça...
  • zoczoc Membre
    16:16 modifié #4
    Si tu es certain qu'il s'agit bien d'un bug du firmware (ce qui est possible), alors ouvre un ticket sur http://bugreport.apple.com/

    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
  • Eric P.Eric P. Membre
    16:16 modifié #5
    Le problème, c'est que je n'arrive pas à  reproduire le bug d'une façon systématique, il y a donc peut-être une configuration particulière dans le dessin qui provoque ce bug.

    Je vais devoir chercher.

    Merci

    Eric
  • Eric P.Eric P. Membre
    16:16 modifié #6
    Bon j'ai trouvé un truc.
    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


  • AliGatorAliGator Membre, Modérateur
    16:16 modifié #7
    Heu oui c'est un CGFloat donc un float...
    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.
  • Eric P.Eric P. Membre
    16:16 modifié #8
    En fait avec un float ça fonctionne un certain temps puis en zoomant j'obtiens ce bug aléatoirement.
    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
  • Eric P.Eric P. Membre
    16:16 modifié #9
    Fausse joie, ça crash aussi avec un integer, l'échéance est juste retardée.

    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
  • Philippe49Philippe49 Membre
    16:16 modifié #10
    Il y a déjà  un premier problème :

    CGContextRef contex = UIGraphicsGetCurrentContext();<br />	// Drawing lines with a white stroke color<br />	NSLog(@&quot;%@&quot;,contex);<br />	return;
    


    renvoie (null) car tu n'est pas dans une méthode drawRect:
  • Eric P.Eric P. Membre
    16:16 modifié #11
    J'ai rajouté une classe pour gérer la vue et avoir un context non nul, c'est pareil...

    Eric
  • Eric P.Eric P. Membre
    16:16 modifié #12
    Autre information, le projet joint ci-dessus fonctionne sans problème avec le SDK et le simulateur 2.2.1... y compris en augmentant fortement l'incrémentation (test à  5000) alors qu'en 3.0 ça crash à  118.

    Eric
  • Philippe49Philippe49 Membre
    16:16 modifié #13
    Et en mettant ta boucle de changement de taille de font avec un délai permettant au système de respirer pour la création du systemSizeOfFont ? (un timer en repeat par exemple)
    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 ...
  • AliGatorAliGator Membre, Modérateur
    16:16 modifié #14
    Idée : systemFontOfSize est autoreleased (vu la convention de nommage) : du coup en créer beaucoup peut amener à  un surplus de mémoire non négligeable.
    Intégrer une NSAutoreleasePool dans ta boucle serait une bonne idée, du coup...
  • Eric P.Eric P. Membre
    16:16 modifié #15
    Bon, je ne sais pas si c'est bon mais j'ai mis dans ma boucle:

    NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init];

    en première ligne et :

    [loopPool release];

    en dernière.

    Et ça crash pareil à  i = 118.

    Eric


  • Eric P.Eric P. Membre
    16:16 modifié #16
    Bonsoir,

    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
Connectez-vous ou Inscrivez-vous pour répondre.