1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Auf Array prüfen

Dieses Thema im Forum "OS X-Developer" wurde erstellt von Drobs, 05.01.10.

  1. Drobs

    Drobs Carola

    Dabei seit:
    23.05.08
    Beiträge:
    115
    Hallo ihr Pro's,

    ich stehe grade total auf der Leitung und habe auch nach aktivem Googeln und Bücher durchstöbern keine Antwort gefunden.

    Wie kann ich Überprüfen ob ein Objekt vom Typ NSArray ist?

    Das kann ja eig. nicht so schwer sein, aber ich komme grade echt nicht drauf.

    Danke schon mal fürs "Augenöffnen" :-D
     
  2. Jamsven

    Jamsven London Pepping

    Dabei seit:
    21.11.07
    Beiträge:
    2.046
    Code:
    if([deinObject isKindOfClass:[NSArray class]])
    {
         NSLog(@"%@ ist ein Objekt der Klasse ", deinObject);
    }
    else
    {
         NSLog(@"%@ ist kein Objekt der Klasse ", deinObject);
    }
     
  3. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Wichtigste Frage: Warum willst Du das? Du solltest nie ohne guten Grund fragen, was das für eine Klasse ist.

    Stattdessen solltest Du fragen, ob das Objekt die Nachrichten versteht, die Du senden willst mit doesRespondToSelector:

    Alex
     
  4. Drobs

    Drobs Carola

    Dabei seit:
    23.05.08
    Beiträge:
    115
    Ich will wissen ob es ein Array ist, damit ich nicht probiere einen String zu durchlaufen, da mein Objekt ein Array oder aber ein String sein kann.

    Deswegen wäre die erste Variante für mich wohl besser, da ich nicht erst gucken muss, ob das Objekt auf eine NSArray spezifische Funktion antwortet, die ich garnicht nutzen will.

    Warum soll ich eigentlich nicht ohne Grund fragen was das für ne Klasse ist? Wo liegt da das Problem?

    Danke für die Hilfe.
     
  5. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    a) Alex hat nicht gesagt, dass du nach Methoden suchen sollst, die du nicht benötigst. Du sollst nur nach Methoden suchen, die du benötigst. Wenn du ein Objekt durchlaufen willst, dann muss es – falls du das nutzen möchtest – auf das Enumerator-Protokoll hören. Das kannst du abfragen. Wenn du es indizieren möchtest, dann muss es auf die Methode -objectAtIndex: hören. Das kannst du abfragen.

    b) Es gibt kein Problem, nach der Klasse zu fragen. Es hat bloß Nachteile:

    - Eine solche Frage ist C++ oder Java, aber nicht Objective-C. Bei jeder deiner Nachrichten wird abgefragt, ob der Empfänger auf eine bestimmte Methode hört. Dabei spielt es keine Rolle, zu welcher Klasse der Empfänger gehört. So denkt Objective-C und das nennt man Late-Binding.

    - Wieso solltest du eine Frage stellen, die dich nicht interessiert. Es kann dir doch am Arsch vorbeigehen, ob das ein Array ist oder nicht. Du willst abzählen? Dann frage nach, ob das Ding abgezählt werden kann. Stell dir vor, es ist ein Set. Das kann abgezählt werden. Dein Code würde also funktionieren. Du würdest es aber verweigern, weil es kein Array ist. Wieso?

    Beispiel aus meinem Buch: Du willst eine Tippse einstellen. Du kannst jetzt jede Bewerberin fragen, ob sie Sekretärin ist, weil du vermutest, dass eine Sekretärin tippen kann. Aber wozu? Frag die Bewerberin doch einfach, ob sie tippen kann.
     
    below gefällt das.
  6. Poljpocket

    Poljpocket Salvatico di Campascio

    Dabei seit:
    07.01.07
    Beiträge:
    432
    In dieser Hinsicht würde dir auch das weiterhelfen, es sei denn, du benutzt kein Obj-C 2.0:

    – conformsToProtocol:

    da schaust du nach, ob das Objekt NSFastEnumeration unterstützt. feddich...

    Gruss ppocket
     
  7. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    Und wenn er kein Objective-C 2.0 nutzt, fragt er halt ab, ob es das Objekt etwas mit objectEnumerator anfangen kann.
    Code:
    SEL enumeratorSelector = @selector( objectEnumerator );
    if( [object respondsToSelector:enumeratorSelector )] ) {
       NSEnumerator* itemsEnum = [object objectEnumerator];
       while( (id = [itemsEnum]) ) {
          // benutze mich
          // wirf mich weg
       }
    }
     
    Poljpocket gefällt das.

Diese Seite empfehlen