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 objectForKey
nil
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
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.
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.
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]
Das wird nicht helfen, da '[NSNull null]' nicht die Eigenschaft hat, mehr als 'nil zu untersuchen 'tut. –
Wenn Sie die Prüfung viel tun müssen, können Sie immer eine handliche Dandy-Kategorie verwenden: https://gist.github.com/707337 – mipadi
@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. –
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.
Er sagt nicht, dass das zu inspizierende Objekt Null ist, sondern dass der Eigenschaftswert null ist. –
Ahruman: Lesen Sie die Frage noch einmal, ich denke, Sie haben Recht. –
ahruman ist korrekt – refulgentis
- 1. Wie erhalten Sie den Rückgabetyp der überladenen Methode in C++?
- 2. PHP: Gibt es eine Möglichkeit, den Rückgabetyp einer Methode zu erhalten?
- 3. Variabler Rückgabetyp einer Methode in C#
- 4. Gibt es eine Möglichkeit, den Rückgabetyp Arrays.asList zu zwingen
- 5. Generic Rückgabetyp in C#
- 6. von Objective-C Factory-Methode
- 7. Generische Möglichkeit, den Rückgabetyp eines Funktors abzuleiten?
- 8. Wie finde ich den Rückgabetyp einer Methode in JAVA?
- 9. Methode Vererbung in Objective C
- 10. Kann ich den Rückgabetyp einer Aktion von einem Aktionsfilter erhalten?
- 11. Aufrufen einer Objective-C-Methode mit Namen
- 12. Methode überladen in Objective-C?
- 13. Rekursive Methode Objective-C
- 14. Objective-C-Methode Syntax
- 15. Objective-C-Methode Syntaxadresse
- 16. Erhalten Facebook Geburtstage Freunde in Objective C
- 17. Wie erkennt man eine Eigenschaft Rückgabetyp in Objective-C
- 18. Objective-C: Erhalten Sie nach der Ausführung der Methode ein Ergebnis einer Singleton-Klasse-Methode?
- 19. Falscher Rückgabetyp in Methode
- 20. Objective C sendet Farbe Methode
- 21. Wie erzwinge ich den Rückgabetyp einer statischen generischen Methode?
- 22. Gibt es eine Möglichkeit, den Rückgabetyp der "aktuellen Funktion" zu erhalten
- 23. So erhalten Sie den Benutzernamen von macosx in objective-c
- 24. Wie finde ich den Rückgabetyp einer Methode mit System.Reflection.MethodBase in C#?
- 25. Gibt es eine Möglichkeit, den Indexwert in einer LINQ Where-Methode in C# zu erfassen?
- 26. Objective-C: Attribut zu einer Kategorie hinzufügen
- 27. Eine variadic Methode in objective-c überschreiben
- 28. Wie kann ich den Rückgabetyp einer C++ 11-Elementfunktion
- 29. Gibt es eine Möglichkeit, den Ursprung einer Alarmbox zu erhalten?
- 30. Objective-C: Fixieren der Speicherverwaltung in einer Methode
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
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 –