Il est plus ou moins garanti que .representations contient NSImageRep * (bien sûr pas toujours NSBitmapImageRep). Pour être sûr de futures extensions on peut écrire quelque chose comme le code ci-dessous. Et il prend également en compte la représentation multiple (comme dans certains fichiers .icns et .tiff).
@implementation NSImage (Extension)
- (void) makePixelSized {
NSSize max = NSZeroSize;
for (NSObject* o in self.representations) {
if ([o isKindOfClass: NSImageRep.class]) {
NSImageRep* r = (NSImageRep*)o;
if (r.pixelsWide != NSImageRepMatchesDevice && r.pixelsHigh != NSImageRepMatchesDevice) {
max.width = MAX(max.width, r.pixelsWide);
max.height = MAX(max.height, r.pixelsHigh);
}
}
}
if (max.width > 0 && max.height > 0) {
self.size = max;
}
}
@end
A noter également qu'il est jamais une bonne idée d'utiliser l'un des '-initWithContentsOfURL:' méthodes du thread principal car ils bloquent la boucle d'événement principal. Utilisez un objet 'NSURLConnection' asynchrone pour créer un objet' NSData' et notifier à la place à la fin. –
NSImage peut charger à partir du réseau. Oui sur le point de Rob, cependant. – Ken