• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Auf Array prüfen

Drobs

Carola
Registriert
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
 

Jamsven

London Pepping
Registriert
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);
}
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
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
 

Drobs

Carola
Registriert
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.
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
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.
 
  • Like
Reaktionen: below

Poljpocket

Salvatico di Campascio
Registriert
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
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
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
   }
}
 
  • Like
Reaktionen: Poljpocket