2 Stimmen

Verwendung von NSAlert beginSheetModalForWindow mit contextInfo

Ich erhalte den folgenden Fehler aus dem unten stehenden Alert-Sheet-Code, wenn der Benutzer die Standardschaltfläche drückt:

-[NSRectSet objectForKey:]: nicht erkannter Selektor an Instanz gesendet 0x400876300

Übrigens, der Code funktioniert in Snow Leopard einwandfrei, aber das Problem tritt in Lion auf.

NSMutableDictionary * extrasDict = [[NSMutableDictionary alloc] init];
[extrasDict setObject:@"http://www.google.com" forKey:@"link"];

NSAlert * alert = [NSAlert alertWithMessageText:@"Published Successfully"
                                  defaultButton:@"View Collage on Facebook"
                                alternateButton:nil
                                    otherButton:@"Cancel"
                      informativeTextWithFormat:@"Successfully published to Facebook."];

[alert beginSheetModalForWindow:myWindow
                  modalDelegate:self
                 didEndSelector:@selector(publishedSuccessfullyDidEnd:returnCode:contextInfo:)
                    contextInfo:extrasDict];             

- (void)publishedSuccessfullyDidEnd:(NSAlert *)alert
                         returnCode:(NSInteger)returnCode
                        contextInfo:(void *)contextInfo {
    if (returnCode == NSAlertDefaultReturn) {
        [[NSWorkspace sharedWorkspace] openURL:
         [NSURL URLWithString:[(NSDictionary*)contextInfo objectForKey:@"link"]]]; 
    }       
}

3voto

paulmelnikow Punkte 16441

Wenn Sie die Garbage Collection verwenden, speichern Sie extrasDict in einer Instanzvariablen - egal wo - damit sie am Ende der Schleife nicht freigegeben wird. Das Wörterbuch muss so lange bestehen bleiben, bis die didEndSelector kann darauf reagieren.

0voto

xavier Punkte 26

Ich habe Ihren Codierungsteil ausgeführt. Es funktioniert gut. Prüfen Sie den verbleibenden Teil der Kodierung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X