2

私は達成しようとして[NSMutableDictionary dictionaryWithObjects:frames forKeys:items]いますが、CFDictionary を使用しているため、キーと値のコールバックを制御できます。これは私が持っているものです:

__unsafe_unretained id keys[itemCount];
[items getObjects:keys range:NSMakeRange(0, itemCount)];
__unsafe_unretained id values[itemCount];
[frames getObjects:values range:NSMakeRange(0, itemCount)];
CFDictionaryCreate(kCFAllocatorDefault, (const void **)keys, (const void **)values, itemCount, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);

次のエラーが発生しますCast of an indirect pointer to an Objective-C pointer to 'const void **' is disallowed with ARC

ブリッジングのさまざまな順列を試しましたが、問題なくコンパイルできるようには見えません。

どんな助けでも大歓迎です!

4

3 に答える 3

5

私もその構文を見つけることができませんでした。(編集:ジャスティンの答えには構文があります。)代わりにこれを試してください:

void *keys[itemCount];
[items getObjects:(__unsafe_unretained id *)(void *)keys range:NSMakeRange(0, itemCount)];

を呼び出すときにキャストは必要ありませんCFDictionaryCreate

于 2012-04-23T06:58:56.093 に答える
1

void*この時点で簡単にキャストできます。

CFDictionaryRef d = CFDictionaryCreate(kCFAllocatorDefault,
                        (void*)keys,
                        (void*)values,
                        itemCount,
                        &kCFTypeDictionaryKeyCallBacks,
                        &kCFTypeDictionaryValueCallBacks);

このアプローチを検討することもできます。

const void* keys[itemCount];
CFArrayGetValues((__bridge CFArrayRef)items, CFRangeMake(0, itemCount), keys);
const void* values[itemCount];
CFArrayGetValues((__bridge CFArrayRef)frames, CFRangeMake(0, itemCount), values);

CFDictionaryRef d = CFDictionaryCreate(kCFAllocatorDefault,
                                       keys,
                                       values,
                                       itemCount,
                                       &kCFTypeDictionaryKeyCallBacks,
                                       &kCFTypeDictionaryValueCallBacks);
于 2012-04-23T07:25:34.313 に答える
0

試してみてください(__bridge const void **)keys

于 2012-04-23T01:42:25.133 に答える