Push-Nachrichten von MacTechNews.de
Würden Sie gerne aktuelle Nachrichten aus der Apple-Welt direkt über Push-Nachrichten erhalten?
Forum>Entwickler>Cocoa NSOpenPanel/NSSavePanel Frage

Cocoa NSOpenPanel/NSSavePanel Frage

Slartibartfast16.03.1119:01
Nachdem Apple ja Xcode4 veröffentlich hat, will ich mich nun wieder etwas mit Objective-C und Cocoa beschäftigen und habe ein kleines privates Projekt am Wickel. Bei der Implementierung von Open/Save Dialogen bin ich auf eine neue Art des Aufrufs als Sheet gestoßen, die ich nicht verstehe und bitte Euch um Hilfe. Speziell geht es dabei um die "Inline Funktion" (oder was ist das sonst?) "fileSaveDialogHandler"; eine solche Schreibweise mit "^" habe ich sonst noch nirgendwo gesehen.
Funktionert zwar prima (habe das aus einem Apple Beispiel kopiert und angepaßt), ich möchte aber auch gern verstehen, was da abgeht ...
Anbei ein Stück Quellcode:

- (void) fileSaveDialog:(NSString *)fileNameAndPath {
NSSavePanel *savePanel = [NSSavePanel savePanel];
NSString *file = [fileNameAndPath lastPathComponent];
NSURL *url = [NSURL fileURLWithPath:[fileNameAndPath stringByDeletingLastPathComponent]];
[savePanel setDirectoryURL:url];
[savePanel setNameFieldStringValue:file];
[savePanel setCanCreateDirectories:TRUE];
[savePanel setAllowedFileTypes:[NSArray arrayWithObjects:@"cry", nil]];
void (^fileSaveDialogHandler)(NSInteger) = ^(NSInteger result) { <--- was ist das???
if (result == NSFileHandlingPanelOKButton) {

....

};
};
[savePanel beginSheetModalForWindow:theWindow completionHandler:fileSaveDialogHandler];
}


Danke schon mal im voraus. (Ach so, alle anderen Aufrufe des NSSavePanel als Sheet sind ab 10.6 als "deprecated" gekennzeichnet.)

0

Kommentare

ExMacRabbitPro17.03.1100:56
void (^fileSaveDialogHandler)(NSInteger) = ^(NSInteger result) { <--- was ist das???

Das ist ein sog. C Block. Blocks hat Apple als "Language Extention" für C, Objective-C und C++ mit 10.5 eingeführt (wenn ich mich recht erinnere).
Sie sind im Prinzip eine Vereinfachung von Zeigern auf Funktionen, indem die Funktion ohne explizite Deklaration inline angegeben werden kann. C Blocks verwendet Apple mittlerweile sehr oft als Handler für alle möglichen Call-Back Funktionen. z.B. macht das Game Center API von iOS regen Gebrauch davon. Auch von Grand Central sind Blocks ein essentieller Bestandteil.
Genauere Informationen zu C Language Blocks findest Du im Blocks Programming Guide bei Apple:
0
Slartibartfast17.03.1104:59
ExMacRabbitPro

Vielen Dank für die Erklärung und den Link. Wenn man nicht weiß, wonach man suchen soll, ist selbst Google keine große Hilfe

0

Kommentieren

Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.