3.0と2.2.1の両方で動作するプログラムでNSMapTableを使用しています。予想通り、プログラムは2.2.1ライブラリーの問題もなくコンパイルが、私は3.0に切り替えたとき、私はコンパイルエラーを取得:つまり3.0ヘッダーにNSMapTableがありませんか?
error: expected specifier-qualifier-list before 'NSMapTable'
、XcodeはNSMapTableクラスの宣言を見つけることができません。私はNSMapTableを使用することができるようにするために、私自身のヘッダと私の実装ファイルで
#import <Foundation/NSMapTable.h>
に(NSMapTable @class)前方宣言に入れていました。
これについての説明はありますか?それとも単なるバグか、単純でシンプルなのでしょうか?
(私は、もちろん、NSMapTableを使用するクラスのヘッダファイルに#IMPORT、まだ具体的なインポートを必要としているかということを指摘すべきである。)
iPhone上でNSMapTableを使用しようとする人にとっては、簡単なケース(キーがNSCopyingに準拠していない場合)のための辞書で簡単に置き換えることができます。 の代わりに: NSMapTable * mt = [NSMapTable mapTableWithWeakToWeakObjects]; [mt setObject:theObj forKey:theKey]; do: NSMutableDictionary * dict = [NSMutableDictionary dictionaryWithCapacity:100]; [dict setObject:theObj forKey:[NSValue valueWithNonretainedObject:theKey]]; – Felixyz
CFMutableDictionaryを使用することもできます。CFDictionaryKeyCallBacks keyCallbacks = {0}; CFMutableDictionaryRef dict = CFDictionaryCreateMutable(NULL、0、&keyCallbacks、&kCFTypeDictionaryValueCallBacks); CFDictionarySetValue(dict、key、value);値=(id)CFDictionaryGetValue(dict、key); – nanotech