Bereiche
News
Rewind
Tipps & Berichte
Forum
Galerie
Journals
Events
Umfragen
Themenwoche
Kleinanzeigen
Interaktiv
Anmelden
Registrierung
Zu allen empfangenen Nachrichten
Suche...
Zur erweiterten Suche
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
Slartibartfast
16.03.11
19: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.)
Hilfreich?
0
Kommentare
ExMacRabbitPro
17.03.11
00: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:
Hilfreich?
0
Slartibartfast
17.03.11
04: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
Hilfreich?
0
Kommentieren
Diese Diskussion ist bereits mehr als 3 Monate alt und kann daher nicht mehr kommentiert werden.