Gibt es eine Möglichkeit, die ordentliche Objective-C-Indexfunktion in Xcode 4.4 zu erhalten?

7

Ich habe alles über die neuen Objective-C-Literale gelesen und Xcode verwendet, um meinen alten Code zu konvertieren, aber der Indexierungscode hat sich nicht geändert. Ich habe es von Hand geändert, aber dann würde es nicht kompilieren. Ich habe einen Beitrag gesehen, in dem es hieß, wir müssten bis iOS 6 warten, aber ich möchte die Indexierung JETZT!

Gibt es eine Lösung?

    
David H 27.07.2012, 19:59
quelle

1 Antwort

21

Nun, es gibt einen Weg, es zu tun! Fügen Sie NSArray und NSDictionary die Indizierungsmethoden als Kategorie hinzu, und Sie können die Funktion für die meisten Klassen abrufen, für die Sie dies wünschen. Sie können in ObjectiveC-Literalen hier nachlesen. Und dank James Webster's Lösung für @YES und @NO kannst du sie jetzt auch in deinen Projekten richtig einsetzen! (die Technik)

1) Erstellen Sie die Schnittstellendateien

%Vor%

2) Erstellen Sie die Implementierungsdateien // sehen Sie die Bearbeitung unten, bevor Sie dies tun - Sie können dies überspringen

%Vor%

3) Fügen Sie die Interface-Dateien zur globalen Verwendung in Ihre pch-Datei ein, oder fügen Sie sie bei Bedarf in .m-Dateien hinzu

%Vor%

4) Rebuild, dann fügen Sie die folgenden Dateien hinzu, um zu überprüfen, ob alles funktioniert

%Vor%

BEARBEITEN: Nun, nach einem Schlüssel-llvm / clang-Apple-Ingenieur gibt es eine Bibliothek, die bereits mit den Implementierungen verknüpft ist, so dass Sie nur die Schnittstellendatei benötigen:

Datum: Mon, 20 Aug 2012 15:16:43 -0700 Von: Greg Parker An: ... Betreff: Betreff: Wie funktioniert das Subskribieren der Obj-C-Sammlung unter iOS 5? ...

  

Als Experiment habe ich die Kategorie @interface für diese Methoden hinzugefügt, aber nicht die @implementation - die App lief immer noch gut (zumindest im 5.1-Simulator)

Der Compiler gibt dieselben Aufrufe aus. Die Magie ist in der zunehmend ungenau benannten libarclite ("Es ist nicht nur für ARC Anymore ™"), die Implementierungen der Subskribierungsmethoden zur Laufzeit hinzufügt, wenn sie nicht bereits existieren.

IIRC gibt es einige Subskript-fähige Klassen, die libarclite nicht aufrüstet (NSOrderedSet, vielleicht?), so dass Sie noch gründlich auf älteren Implementierungszielen testen müssen.

    
David H 27.07.2012, 19:59
quelle