2010-10-30 17 views
0

J'ai une application qui utilise NSDocument pour ouvrir les fichiers. J'ai un NSView dans mon NIB, et je voudrais mettre sa taille en fonction de l'image ouverte:readFromData: ofType: erreur: appelée avant le chargement de la plume, donc je ne peux pas utiliser mon IBOutlets D: <

- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError { 
    NSLog("FOO"); 
    // Load image 
    // ... 

    // Change size 
    [mainView setFrameSize:NSMakeRect(image.size.width, image.size.height)]; 
    [mainView display]; // Redraw 

    [image release]; 
    return YES; 
} 

Cependant, je l'ai fait un peu foobar chèque: « FOO » est connecté readFromData:ofType:error: et « BAR » est connecté méthode initWithFrame: de la vue, mais la sortie de la console est:

2010-10-30 16:20:45.670 Pwnshop[513:a0f] Foo 
2010-10-30 16:20:45.680 Pwnshop[513:a0f] Bar 

ce qui signifie que j'envoie le message setFrameSize: à un non-initié NSView.

Comment puis-je faire NSDocument charger la plume d'abord, et puis faire readFromData:ofType:error:, ou mieux changer la taille de vue après la pointe est chargée?

Merci.

Répondre

2

How can I make NSDocument load the nib first, and then do readFromData:ofType:error: , …

Vous ne pouvez pas.

Modifier de l'année 2011: Mais si vous pouvez demander Snow Leopard ou une version ultérieure, vous pouvez remplacer the canConcurrentlyReadDocumentsOfType: class method revenir YES, dans ce cas, vous recevrez le message readFromData:ofType:error: sur un thread d'arrière-plan. Lisez la documentation liée pour les exigences et mises en garde pertinentes.

… or better change the view size after the nib is loaded?

Mettre en œuvre windowControllerDidLoadNib: et faites votre fenêtre/vue des modifications. N'oubliez pas d'appeler super, comme démontré par l'implémentation fournie par le modèle NSDocument-subclass.