Delegate anscheinend nicht implementiert

  • Delegate anscheinend nicht implementiert

    Hi,

    ich habe für ein Projekt eine neue Klasse erstellt, welche von NSStream erbt. In diese habe ich die geforderte -stream:handleEnvent geschrieben.

    Dann habe ich ein NSInputStream und ein NSOutputStream Objekt erstellt und deren delegate auf self gesetzt, also auf die Streamklasse:

    Quellcode

    1. -(myStream*)initWithServer:(NSString*)server {
    2. [self init];
    3. NSHost* host = [NSHost hostWithName:server];
    4. [iStream setDelegate:self];
    5. [oStream setDelegate:self];
    6. [NSStream getStreamsToHost: host port: 6667 inputStream:&iStream outputStream:&oStream];
    7. [iStream open];
    8. [oStream open];
    9. [iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    10. [oStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    11. NSLog(@"%d", [iStream streamStatus]);
    12. return self;
    13. }
    Alles anzeigen



    Wenn ich jetzt aber den Debugger starte meldet der, dass das delegate nicht implementiert sei.
    Woran liegt das?

    Ich geh mal davon aus, dass das nicht direkt mit Streams zutun hat sondern ein Fehler meinerseits ist.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von chrizke ()

  • Schaut wie folgt aus:

    Quellcode

    1. @interface myStream : NSStream {
    2. NSInputStream* iStream;
    3. NSOutputStream* oStream;
    4. NSMutableData *_data;
    5. }
    6. -(myStream*)initWithServer:(NSString*)server;



    Hmm obs jetzt der Debugger oder Compiler meldet, weiß ich nicht. Könnte auch gut der Compiler sein. Es steht bei den Warnungen mit dem gelben Ausrufezeichen.
  • Hm Tatsache, du hast Recht. Ich werde es mal ausprobieren.

    EDIT: Ich habe jetzt mal die Zeile mit dem getStreamsToHost vor die delegate-Zuweisung gesetzt, aber ich bekomme immernoch folgende Warnung:
    warning: class 'myStream' does not implement the 'NSStreamDelegate' protocol
  • dann sollte doch da noch

    Quellcode

    1. @interface myStream : NSStream {
    2. NSInputStream* iStream;
    3. NSOutputStream* oStream;
    4. NSMutableData *_data;
    5. }
    6. -(myStream*)initWithServer:(NSString*)server;


    das
    warning: class 'myStream' does not implement the 'NSStreamDelegate' protocol


    also:

    Quellcode

    1. @interface myStream : NSStream <NSStreamDelegate>{
    2. NSInputStream* iStream;
    3. NSOutputStream* oStream;
    4. NSMutableData *_data;
    5. }
    6. -(myStream*)initWithServer:(NSString*)server;


    Oder hab ich da was falsch verstanden?
  • little_pixel schrieb:

    Warum sollte man von NSStream erben?
    Ich sehe die Begründung nicht.

    Viele Grüße

    Das ist in der Tat atemberaubend und kommt wohl davon, dass man zuweilen Dinge über Objective-C liest, die keinerlei Begründungskontext aufweisen: "Objective-C unterstützt Delegating."

    Delegating ist die Black-Box-Alternative zu Subclassing (Negm-Awad, Objective-C und Cocoa, Band I, S. 731 f.; Negm-Awad/Kienle, Objective-C und Cocoa, Band 2, S. 348 f.) In einer Subklasse Delegating zu implementieren ist daher in etwa so, wie in der Straßenbahn mit dem Auto zu sitzen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Amin Negm-Awad schrieb:

    little_pixel schrieb:

    Das ist in der Tat atemberaubend und kommt wohl davon, dass man zuweilen Dinge über Objective-C liest, die keinerlei Begründungskontext aufweisen: "Objective-C unterstützt Delegating."

    Amin Negm-Awad schrieb:

    In einer Subklasse Delegating zu implementieren ist daher in etwa so, wie in der Straßenbahn mit dem Auto zu sitzen.
    Ist zwar OT, aber ich schlags trotzdem vor. Bring doch bitte neben dem Buch noch "Das andere Buch" raus wo all die Sprüche drinstehen die du hier im Forum rauslässt. Ich find die jedesmal herrlich :thumbsup: .