2010-11-19 5 views
3

Ich schreibe eine generische Ansichtsklasse 'Attribut/Schlüsseleditor' unter iOS und prüft zum Beispiel den Typ des Bearbeitungsschlüssels mit [objectForKey isKindOfClass:[NSDate class]]. Ich rannte gerade in eine Wand, als ich erkannte, dass das schief gehen wird, wenn objectForKeynil ist. Gibt es eine Möglichkeit, den Klassen-/Rückgabetyp für eine generische Objective-C-Eigenschaft abzurufen, selbst wenn diese Eigenschaft nil ist? Ich weiß über method_getReturnType in der Objective-C-Laufzeit, aber das klingt nach Overkill für das, was ich brauche.Möglichkeit, den Rückgabetyp einer Methode in Objective C zu erhalten?

Antwort

3

Sie können nicht. Obwohl Rückgabetypinformationen für Methoden verfügbar sind, ist die Rückgabetypcodierung für Methoden, die Objekte zurückgeben, einfach @, was "Objektreferenz" bedeutet.

0

Kannst du nicht zuerst überprüfen, ob objectForKey! = Nil ist, und mit der isKindOfClass-Prüfung fortfahren? Wenn Sie sicherstellen, dass das Objekt nicht gleich Null ist, können Sie es ohne Fehler einfach überprüfen oder sicher beenden.

+0

sehr wahr, und wahrscheinlich, was ich auf lange Sicht tun muss, wenn es hier keine Lösung gibt - aber ich möchte der Benutzer in der Lage sein, ein Objekt einzurichten, wo es keine gibt. In diesem Fall beispielsweise baue ich ein Datenmeldesystem und hatte Anfangsdatum und Enddatum Null, also eine einfache Lösung, um sie einfach zu machen [NSDate date], aber trotzdem möchte ich die Flexibilität. – refulgentis

+0

Ich habe keine Ahnung wann! = Nil würde dich daran hindern irgendetwas zu tun. es sei denn, du versuchst irgendeine Superreflexion, in diesem Fall hast du die falsche Sprache dafür –

0

Ich weiß nicht, wo Ihre Daten kommen, aber Sie könnten verdrängend nil mit NSNull zu prüfen, und dass können Sie NSObject-ähnliche Eigenschaften auf etwas, das technisch null ist

Aber die Null gewinnen Scheck wird mehr Schmerz in den Arsch.

Es geht von Objekt! = Nil zu

(NSNull *) Objekt! = [NSNull null]

+0

Das wird nicht helfen, da '[NSNull null]' nicht die Eigenschaft hat, mehr als 'nil zu untersuchen 'tut. –

+0

Wenn Sie die Prüfung viel tun müssen, können Sie immer eine handliche Dandy-Kategorie verwenden: https://gist.github.com/707337 – mipadi

+0

@peter, aber zumindest wäre er in der Lage, isKindOfClass ... ich meine ... Ich schieße hier die Brise.Ich bin mir nicht sicher, ob irgendjemand weiß, wovon er spricht. –

2

Was für Sie fragen, ist nicht sinnvoll.

Denken Sie daran, dass ein Name allein keine Methode identifiziert. Objekte antworten auf diese Nachrichten (oder nicht); Eine Methode existiert nicht alleine, sondern nur als Teil eines Objekts (oder einer Klasse).

Wenn Sie kein Objekt haben, können Sie nicht erkennen, was hypothetisch eine Nachricht an ein Objekt zurücksenden würde.

ETA: Wie können Sie die Attribute von etwas bearbeiten, aber nicht das Objekt bearbeiten, um seine Eigenschaften zu untersuchen? Es scheint, als ob du irgendwo woanders einen Virus hast.

Ich weiß über method_getReturnType in der Objective-C-Laufzeit, aber das klingt wie übertrieben für das, was ich brauche.

Es gibt zwei Möglichkeiten. Wenn Sie informelle Eigenschaften (KVC-kompatible Accessor-Methoden ohne @property-Deklaration) unterstützen möchten, ist dies genau das, was Sie brauchen. Wenn Sie nur an formalen Eigenschaften interessiert sind(), verwenden Sie the property_getAttributes function.

+0

Er sagt nicht, dass das zu inspizierende Objekt Null ist, sondern dass der Eigenschaftswert null ist. –

+0

Ahruman: Lesen Sie die Frage noch einmal, ich denke, Sie haben Recht. –

+0

ahruman ist korrekt – refulgentis

Verwandte Themen