handler

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Beim Erzeugen eines Alert Sheets gibt es bekanntlich mehrere Methoden des Aufrufs. Bei der Methode
    [alert beginSheetModalForWindow:[sender window]
    modalDelegate:self
    didEndSelector:callback
    contextInfo:nil];

    bekomme ich die meldung, dass diese Methode nicht mehr erwünscht ist und man diese Methode verwenden soll

    [alert beginnSheetModalForWindow:[sender window]
    completionHandler:(void (^)(NSModalResponse returnCode))handler];

    Im Programming Guide für sheets wird die obige Methode verwendet (obwohl ja scheinbar nicht mehr erwünscht) und unter dem Suchbegriff handler findet man gar nichts. Worum handelt es sich bei diesem Handler bzw. Wie kann er erzeugt werden???
    Bitte um Ratschläge.

    LG

    Bernhard

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von b.brandl ()

  • Leider bin ich bei den Blocks nicht wirklich fündig geworden. Der einzige Hinweis besteht darin, dass NSModalResponse ein enum ist:
    enum {
    NSModalResponseStop = (-1000),
    NSModalResponseAbort = (-1001),
    NSModalResponseContinue = (-1002),
    };
    typedef NSInteger NSModalResponse;

    handler – The completion handler that gets called when the sheet’s modal session ends. Ich wollte hier eine vorher definierte Methode übergeben, was aber zu einem Fehler geführt hat

    aber leider kein Hinweis auf irgend einen Block, der weitere Rückschlüsse zulässt.
    Danke trotzdem.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von b.brandl ()

  • Da habe ich mich wohl ungenau ausgedrückt: Du solltest nicht nach "NSModalResponse" suchen, sondern allgemein nach "blocks". Schliesslich ist der letzte Parameter, den Du der Methode "beginnSheetModalForWindow:completionHandler:" übergibst, ein Block. Dieser Code wird ausgeführt, wenn das Sheet geschlossen wird und macht im einfachsten Fall nichts, da (zumindest laut Doku) ein Entfernen des Sheets nicht mehr explizit erfolgen muss.

    Das könnte dann irgendwie so aussehen:

    Quellcode

    1. [alertSheet beginSheetModalForWindow:self.window completionHandler:^(NSModalResponse returnCode) {}];


    HTH, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Danke für die vielen Hilfestellungen. habe mir die vorhandenen Informationen über Blocks reingezogen und verschiedene Varianten ausprobiert - zuletzt habe ich den von MyMattes einfach übernommen. Der erzeugt zwar beim Compilieren keinen Fehler aber dann wenn ich den Auslösebutton zum Öffnen des Sheets betätige, gibt das jede Menge Fehlermeldungen:
    2015-03-06 15:30:08.236 Converter[42814:7155942] -[NSApplication beginSheet:completionHandler:]: unrecognized selector sent to instance 0x608000100240
    2015-03-06 15:30:08.236 Converter[42814:7155942] -[NSApplication beginSheet:completionHandler:]: unrecognized selector sent to instance 0x608000100240
    2015-03-06 15:30:08.239 Converter[42814:7155942] (
    0 CoreFoundation 0x00007fff9c1c466c __exceptionPreprocess + 172
    1 libobjc.A.dylib 0x00007fff91fe176e objc_exception_throw + 43
    2 CoreFoundation 0x00007fff9c1c76dd -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
    3 CoreFoundation 0x00007fff9c10eaa4 ___forwarding___ + 1028
    4 CoreFoundation 0x00007fff9c10e618 _CF_forwarding_prep_0 + 120
    5 Converter 0x0000000100001875 -[Converter playWithViews:] + 117
    6 libsystem_trace.dylib 0x00007fff9754ecd7 _os_activity_initiate + 75
    7 AppKit 0x00007fff9b2deb71 -[NSApplication sendAction:to:from:] + 452
    8 AppKit 0x00007fff9b2de970 -[NSControl sendAction:to:] + 86
    9 AppKit 0x00007fff9b4b486c __26-[NSCell _sendActionFrom:]_block_invoke + 131
    10 libsystem_trace.dylib 0x00007fff9754ecd7 _os_activity_initiate + 75
    11 AppKit 0x00007fff9b327509 -[NSCell _sendActionFrom:] + 144
    12 libsystem_trace.dylib 0x00007fff9754ecd7 _os_activity_initiate + 75
    13 AppKit 0x00007fff9b342085 -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 2775
    14 AppKit 0x00007fff9b3412b9 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 491
    15 AppKit 0x00007fff9b340899 -[NSControl mouseDown:] + 714
    16 AppKit 0x00007fff9b83ea18 -[NSWindow _reallySendEvent:] + 12721
    17 AppKit 0x00007fff9b2c516e -[NSWindow sendEvent:] + 446
    18 AppKit 0x00007fff9b277451 -[NSApplication sendEvent:] + 4183
    19 AppKit 0x00007fff9b103608 -[NSApplication run] + 711
    20 AppKit 0x00007fff9b0eea14 NSApplicationMain + 1832
    21 Converter 0x0000000100001fc2 main + 34
    22 libdyld.dylib 0x00007fff996155c9 start + 1
    )

    Irgendwie fehlt mir hier vollkommen der Plan wie die einzelnen dinge hier zusammenhängen :((.
  • Da ich gerade beim Lernen bin habe ich von einer Vorlage aus dem Buch übernommen wo der ursprüngliche Code folgender Maßen lauter:

    [NSApp beginSheet:self.sheet
    modalForWindow:[sender window]
    modalDelegate:self
    didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:)
    contextInfo:(__bridge void*)sender;

    Diese Variante wird dann abgelehnt und die neue Syntax wird automatisch vorgeschlagen????
  • Danke für Eure Geduld. Es hat sich gelohnt, denn ich glaube es nun verstanden zu haben – zumindest funktioniert es.
    Lösung:
    -(IBAction)playWithViews:(id)sender
    {
    NSWindow *actualWindow = [sender window];
    [actualWindow beginSheet:self.sheet completionHandler:^(NSModalResponse returnCode) { }];
    }

    War nur verwirrt, da im Buch noch ältere Versionen verwendet wurden, dadurch hab ich einfach den Überblick verloren. Ich hoffe, dass ich die Erfahrungen für die weiteren Experimente mitnehmen kann