Ich verwende NSMapTable in einem Programm, das unter 3.0 und 2.2.1 ausgeführt werden muss. Wie erwartet, stellt das Programm ohne Probleme für die 2.2.1 Bibliotheken, aber wenn ich auf 3.0 zu wechseln, bekomme ich Fehler Compiler:NSMapTable fehlt in 3.0-Headern?
error: expected specifier-qualifier-list before 'NSMapTable'
Mit anderen Worten können XCode nicht die Deklaration der NSMapTable Klasse finden. Ich musste eine Vorwärtsdeklaration setzt in (@class NSMapTable) in meinem eigenen Kopf und
#import <Foundation/NSMapTable.h>
in meiner Implementierung-Datei um in der Lage sein NSMapTable zu verwenden.
Irgendwelche Erklärungen dafür? Oder ist es nur ein Fehler, schlicht und einfach?
(Ich möchte darauf hinweisen, dass ich tun, natürlich, haben in der Header-Datei der Klasse #import die NSMapTable verwendet, müssen aber noch die spezifische Bedeutung.)
Für alle, die versuchen würden, NSMapTable auf dem iPhone zu verwenden, ist hier eine schnelle und einfache Möglichkeit, sie durch ein Wörterbuch für einen einfachen Fall zu ersetzen (wo der Schlüssel NSCopying nicht entspricht). Statt: NSMapTable * mt = [NSMapTable mapTableWithWeakToWeakObjects]; [mt setObject: theObj forKey: theKey]; do: NSMutableDictionary * dict = [NSMutableDictionary WörterbuchWithCapacity: 100]; [dict setObject: theObj forKey: [NSValue valueWithNonretainedObject: theKey]]; – Felixyz
Sie könnten auch CFMutableDictionary verwenden: CFDictionaryKeyCallBacks keyCallbacks = {0}; CFMutableDictionaryRef dict = CFDictionaryCreateMutable (NULL, 0, & keyCallbacks, & kCFTypeDictionaryValueCallBacks); CFDictionarySetValue (dict, Schlüssel, Wert); value = (id) CFDictionaryGetValue (dict, Schlüssel); – nanotech