2010-12-07 5 views
1

Ich versuche, ein NSArray als Wert in einem NSMutableDictionary zu speichern. Wenn ich versuche, zu holen, was ich hinzugefügt haben, gibt es eine NSFCArray anstelle eines NSArray:NSArray wurde beim Einfügen in das Wörterbuch in NSCFArray umgewandelt

NSArray * list = [NSArray arrayWithObjects:@"one", @"two", @"three", nil]; 
NSMutableDictionary * dictionary = [[NSMutableDictionary alloc] init]; 
for (NSString *name in list) { 
    // first attempt 
    [dictionary setObject:[NSMutableArray arrayWithObject:@"test"] forKey:name]; 
    NSLog(@"first attempt class: %@", [[dictionary valueForKey:name] class]); 
    // second attempt 
    NSArray * realArray = [[NSArray alloc] initWithArray:[dictionary valueForKey:name]]; 
    NSLog(@"second attempt class: %@", [realArray class]); 
} 

Ich gehe davon aus ist dies für Effizienz umgewandelt wird. Allerdings muss mein Wert als NSArray zurückgegeben werden, um Methoden wie "count" aufzurufen, die NSFCArray nicht hat. Wenn ich Werte nicht in einem Wörterbuch als NSArray speichern kann, wie kann ich von einem NSFCArray in ein NSArray konvertieren?

Antwort

7

NSCFArray == , es wird die Seite "toll-free bridged" der Foundation-Objekte angezeigt.

Sie können alles mit einem NSCFArray wie Sie können mit einem NSArray, und umgekehrt. Sie können eine NSArray an eine CFArray-Funktion übergeben und eine CFArray an eine NSArray-Methode übergeben.

Dies liegt daran, der interne Datentyp, den wir als NSArray oder CFArraytatsächlich ein NSCFArray ist bekannt.

Dies gilt nicht für alle Objekte Foundation, ist hier eine Liste aller mautfrei überbrückte Objekte in Cocoa:

alt text

+0

Ah, jetzt zähle ich so in meinem Beispiel funktioniert. Ich bekomme anderswo ein schlechtes Zugangsproblem, aber das ist ein anderes Problem. Danke für die Hilfe! – tassock