2010-12-07 9 views
1

NSArrayをNSMutableDictionaryの値として保存しようとしています。私は私が追加したものをフェッチしようとすると、それは代わりにNSArrayのNSFCArrayを返します。辞書に挿入するとNSArrayがNSCFArrayに変換されます

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]); 
} 

私は、これは効率のために変換されていると仮定します。しかし、私はNSArrayが持っていない "count"のようなメソッドを呼び出すためにNSArrayとして返される値を必要とします。 NSArrayとして辞書に値を格納できない場合、どのようにNSArrayからNSArrayに変換できますか?

答えて

7

NSCFArray == NSArray、それはFoundationオブジェクトの"toll-free bridged"側を公開しています。

NSCFArrayでできることはすべてNSArrayで、その逆も可能です。 NSArrayCFArray関数に渡すことができ、CFArrayNSArrayメソッドに渡すことができます。 NSArrayまたはCFArrayとして私たちに知られている内部データ型は、実際にNSCFArrayあるので

です。

これは、すべての財団のオブジェクトには適用されません、ここではココアのすべてのフリーダイヤルブリッジ・オブジェクトのリストです:

alt text

+0

ああ、今私は上記の私の例では作品を数える参照してください。私は他のところで悪いアクセスの問題を得るが、それは別の問題である。助けてくれてありがとう! – tassock

関連する問題