Problème de fenêtres
Tchouboudou
Membre
Bonjour les gens
Dans mon application, j'ai un array. Je dois créer des fenêtres en fonction de [array count]. Je fais une enumeration et j'appelle une fonction : voici cette fonction :
Il y a une merde (ou plusieurs) au niveau de la mémoire. Les fenêtres s'affichent, mais je ne peux pas les bouger (alors que s'il n'y en a qu'une, je ppeux la déplacer).
Avez-vous LA solution miracle .
Merci d'avance,
Tchouboudou
Dans mon application, j'ai un array. Je dois créer des fenêtres en fonction de [array count]. Je fais une enumeration et j'appelle une fonction : voici cette fonction :
- (void)createStickyWithString:(NSDictionary *)dictionary<br />{<br /> [notesShowed addObject:[dictionary retain]];<br /> <br /> Stickies *newSticky = [[Stickies alloc] initWithContentRect:NSMakeRect(300, 400, 225, 206)<br /> styleMask:NSBorderlessWindowMask<br /> backing:NSBackingStoreBuffered<br /> defer:NO];<br /> <br /> NSView *mainView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 225, 206)];<br /> <br /> NSImageView *stickyImageView = [[NSImageView alloc] initWithFrame:NSMakeRect(0, 0, 225, 206)];<br /> [stickyImageView setImage:[NSImage imageNamed:@"Sticky"]];<br /> [mainView addSubview:stickyImageView];<br /> <br /> NSButton *closeButton = [[NSButton alloc] initWithFrame:NSMakeRect(14, 181, 19, 19)];<br /> [closeButton setBezelStyle:NSRoundedBezelStyle];<br /> [closeButton setButtonType:NSToggleButton];<br /> [closeButton setImagePosition:NSImageOnly];<br /> [closeButton setImage:[NSImage imageNamed:@"close"]];<br /> [closeButton setBordered:NO];<br /> [mainView addSubview:closeButton];<br /> <br /> NSTextField *field = [[NSTextField alloc] initWithFrame:NSMakeRect(14, 31, 191, 155)];<br /> [field setEditable:NO];<br /> [field setBordered:NO];<br /> [field setDrawsBackground:NO];<br /> [field setFont:[NSFont fontWithName:@"Marker Felt" size:14]];<br /> [field setStringValue:[dictionary objectForKey:@"String"]];<br /> [mainView addSubview:field];<br /> <br /> [newSticky setContentView:mainView];<br /> <br /> [newSticky makeKeyAndOrderFront:nil];<br /> <br /> [notes removeObject:dictionary];<br />}
Il y a une merde (ou plusieurs) au niveau de la mémoire. Les fenêtres s'affichent, mais je ne peux pas les bouger (alors que s'il n'y en a qu'une, je ppeux la déplacer).
Avez-vous LA solution miracle .
Merci d'avance,
Tchouboudou
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Puis tu peux parcourir ton tableau et créer une instance de ta classe controller par élément dans ton tableau (n'oublie pas de stocker les controller quelque part pour les relâcher quand tu n'en auras plus besoin).
Il y a encore d'autres façons de faire.
Il manque trop de code pour voir ce qui cloche : qu'est-ce que Stickie par exemple ?
Comme dit Renaud, les .nib sont fait pour ce genre de choses !
Crée au moins la "contentView" dedans
Le retain est inutile ici, tu ajoutes le dictionary dans un array, ceux-ci effectuent le retain en interne.
N'oublies pas le release une fois que tu n'as plus besoin de ton objet, c'est valable pour tout le code au-dessous aussi.
schlum : Stickies est une sous-classe de NSWindow, elle me permet juste de faire quelques réglages (setOpaque, setHasShadow, etc).
Si vous me permettez, j'aimerais vous poser une question sur la mémoire. Dans ma fonction init, j'initialise un array, et je crée ensuite un dictionnaire que j'ajoute dans l'array. Je "release" le dictionnaire.
Dans une autre fonction, je supprime le dictionnaire. Et, d'un coup la fenêtre de debug s'affiche.
Cela doit être sûrement un problème de mémoire, mais comment le régler ?
Dans ce cas il ne faut pas releaser ton dictionnaire après l'avoir ajouté dans l'array, mais dans ta fonction de suppression.
Ca plante quand tu veux supprimer le dictionnaire de ton array ?
Initialisation :
Et pour la suppression
Sinon, la suppression se fait bien, c'est après que ça bug, mais si je fais pas la suppression, ça marche impec'.
Euh, peut-être il faut que je précise que la suppression se fait dans une énumération qui se fait tous les 10 secondes (NSTimer) ?
Voili, voilou...
Avec un NSEnumerator ? Il n'est pas conseillé de modifier une structure énumérée, il vaut mieux passer par une boucle for...next classique.
Comment ça ? Tu maà®trises ta mémoire avec un NSTimer ?? J'ai pas trop compris, mais vu comme ça ça ne me paraà®t pas très sérieux ??? :P
J'ai un tableau. Ce tableau contient un dictionnaire qui lui-même contient une chaà®ne et une date.
Toutes les 10 secondes, une fonction est appelé pour savoir si la date du dictionnaire (il peut y avoir plusieurs dictionnaire, mais là , c'est pour l'exemple ) correspond à la date de maintenant (jour/mois/année et heure/minutes).
Si elle est la même, j'éxécute une fonction, qui ouvre une fenêtre et qui supprime l'objet du tableau.
Malheuresement, il y a toujours un blocage lorsque je supprime l'objet.
Voici le code de la fonction appelé toutes les 10 secondes :
Et le code createStickyWithString :
Voili, voilou...
Il est bien précisé dans la doc de la méthode "objectEnumerator" :
Dans la fonction appelé toutes les 10 secondes, j'ai mis un tableau temporaire. Au lieu de supprimer l'objet, je le met dans le tableau. Puis, après la boucle, je supprime les objets avec [notes removeObjectsInArray:array];
Malheuresement, toujours le même problème.
EDIT : Vous allez rigoler (ou pas), mais le problème venait absolument pas du tableau, mais du timer auquel je faisait un release alors qu'il n'avait pas été retenu
En tout cas, merci beaucoup tout le monde !