[Résolu] Crash au chargement d'une image dans IconFamily
kasey
Membre
Bonjour,
Novice en programmation sur mac, j'essaye de faire une petite application permettant la conversion d'image en .icns a la volée. J'ai trouvé un exemple de programme open source très intéressant sur internet mais même avec l'aide de celui-ci je ne m'en sort pas.
je pense que mon code pourrais aider a comprendre mon problème :
Pour résumer lorsque je lance le programme celui-ci plante a l'intérieur de la ligne suivante :
Je pense que cela viens d'une mauvaise initialisation de l'objet de ma part...
Si quelqu'un a une idée d'ou peut provenir mon problème
Novice en programmation sur mac, j'essaye de faire une petite application permettant la conversion d'image en .icns a la volée. J'ai trouvé un exemple de programme open source très intéressant sur internet mais même avec l'aide de celui-ci je ne m'en sort pas.
je pense que mon code pourrais aider a comprendre mon problème :
NSString* exPath = [NSString stringWithFormat:@"/Users/kasey/Desktop/MacBookPro.jpg"];<br /> NSString* tmpPath = [NSString stringWithFormat:@"/Users/kasey/Desktop/MacBookPro.jpg"];<br /> NSString* outPath;<br /> <br /> NSImage *image = [[NSImage alloc] initWithContentsOfFile:tmpPath];<br /> <br /> IconFamily *icon = [IconFamily iconFamilyWithThumbnailsOfImage:image];<br /> <br /> outPath = [NSString stringWithFormat:@"%@/%@", exPath, [tmpPath lastPathComponent]];<br /> <br /> NSString *icnsPath = [NSString stringWithFormat:@"/Users/kasey/Desktop/MacBookPro.icns"];<br /> [icon writeToFile:icnsPath];<br /> [icon setAsCustomIconForFile:icnsPath];<br />
Pour résumer lorsque je lance le programme celui-ci plante a l'intérieur de la ligne suivante :
IconFamily *icon = [IconFamily iconFamilyWithThumbnailsOfImage:image];
Je pense que cela viens d'une mauvaise initialisation de l'objet de ma part...
Si quelqu'un a une idée d'ou peut provenir mon problème
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il y a plusieurs points qui me gène dans ton code:
NSString* exPath = [NSString stringWithFormat:@/Users/kasey/Desktop/MacBookPro.jpg];
Pourquoi utiliser stringWithFormat alors que
NSString* exPath = @/Users/kasey/Desktop/MacBookPro.jpg;
suffit. Idem pour la seconde ligne. Il faut l'utiliser lorsque la chaà®ne comprend des tokens introduits par %. Par exemple %d permet d'introduire une valeur entière (32 bits signés).
NSString* tmpPath = [NSString stringWithFormat:@/Users/kasey/Desktop/MacBookPro.jpg];
NSString* outPath;
NSImage *image = [[NSImage alloc] initWithContentsOfFile:tmpPath];
Secondemment, IconFamily n'est pas une classe, il s'agit d'une structure C. De cette manière, il n'est pas possible d'utiliser la syntaxe d'appel de messages de l'Objective C.
D'autre part, je ne sais où tu as trouvé cette fonction. Je n'ai pas trouvé de référence dans la doc.
En pour finir, attention certaines fonctions figurant dans Icon Services and Utilities Reference ne sont plus supportées depuis Panther et Léopard.
Par contre pour ce qui est de la icon familly j'ai récupérer ce qui me semble bien être une classe permettant de la gérer ici et plus précisément on retrouve la description de la fonction que j'ai utiliser la
j'ai réécris mon code comme ceci :
La syntaxe est-elle plus juste?
tu compiles avec l'option adéquate ?
Si tu veux simplement faire une image 128x128 à partir d'une image, il y a plus simple et tu peux le trouver sur ce site
un post de Bru
un post
Non non dans mon cas précis j'ai besoins d'icônes, par contre il ne s'agis pas (je crois) d'un framework, mais suivant l'auteur de la classe d'un wrapper.
--> http://iconfamily.sourceforge.net/IconFamily.html
Je pense avoir bien ajouté les frameworks nécessaires au bon fonctionnement de l'application, mai de toute façon si le problème venais de l'oublis d'un framework la compilation ne passerais pas non?
J'ai joint mon projet au post si quelqu'un est motivé pour y jeter un oeil
Dans ce cas là , IconFamily est bien une classe, que tu peux trouver ici.
Ton code est correct (mais tu release pas ton image).
Ca semble être un bug avec les projets de type foundation tool, avec une appli normale ca fonctionne.
À toi de voir maintenant d'où ça vient.. j'ai pas regardé plus je suis crevé
je vous tiens au courant
Il faut initialiser NSApp au début du code:
Mais heu j'ai rien compris, qu'est ce que je viens d'ajouter a mon code?
Merci en tout cas :kicking:
Mais si cette initialisation est obligatoire d'après ce que j'ai pus lire dans la doc, pourquoi ne pas la mettre dans le template de base?
Elle est dans les template XCode de base.
Ben, on voit pas ce que cela y ferait. Une Foundation tool n'utilise pas AppKit.
C'est l'inclusion de "IconFamily.h" qui perturbe tout ici.
Par exemple, NSApplication , NSImage sont dans le framework AppKit. Le #import <Foundation/Foundation.h>Â est ici clairement insuffisant. Mais il doit y avoir quelque part dans "IconFamily.h" un #import <Cocoa/Cocoa.h> qui importe à la fois Foundation et AppKit. Cela sauve ton code visible.
Quand à la raison de lancer une instance de NSApplication, là c'est le mystère, dont l'explication ne peut être que cachée dans l'exécution des méthodes de la librairie. Il faudrait fouiller dans son code pour savoir où.Â
Bref, ici il serait plus logique de choisir une Cocoa-Application qu'une Foundation Tool. C'est pour cela que je disais que [NSApp sharedApplication] n'est pratiquement jamais à faire, si on choisit évidemment le template correspondant à ce que l'on veut faire.Â
Petit a petit je commence a cerner un peu mieux ce langage.