0

FTP経由でダウンロードされたNSMutableArrayがあります。配列内の要素は、CFStringRef型のCFFTPStreamリソース定数です。

「kCFFTPResourceName」定数から文字列を作成したいと思います。しかし、Objective Cとiphoneの開発に慣れていないので、私は苦労しています。

私が行ったことはすべて、ARCが次のような適合またはエラーをスローする結果になりました。

2013-01-03 15:31:44.874 Street Light Reporter[1382:11603] -[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x6e1e930
2013-01-03 15:31:44.875 Street Light Reporter[1382:11603] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x6e1e930'

私の最近の試みは次のとおりです。CFStringRef*c= [ar objectAtIndex:4]; これは、次の2つの理由で機能しません。

Incompatible pointer types initializing 'CFStringRef *' (aka 'const struct __CFString **') with an expression of type 'id'

Implicit conversion of an Objective-C pointer to 'CFStringRef *' (aka 'const struct __CFString **') is disallowed with ARC

私はあらゆる種類の型キャストを試したり、(__ bridge)をいじったりしてみましたが、運がありませんでした。

誰かがここで私を助けることができますか?どんな助けでもありがたいです。

4

3 に答える 3

5

CFStringRefはすでにポインタであり、スターは必要ありません。また、CFStringRefをNSStringにキャストすると、正常に動作し、操作が簡単になります。これは、フリーダイヤルブリッジと呼ばれます。それでもCFStringRefが必要な場合:

アーク:

CFStringRef c = (__bridge CFStringRef)([ar objectAtIndex:4]);

非アーク

CFStringRef c = (CFStringRef)([ar objectAtIndex:4]);
于 2013-01-03T20:50:23.290 に答える
3

ここには2つのエラーがあります。最初の最も深刻なエラーは、arオブジェクトがではNSDictionaryないということNSArrayです。だからパフォーマンス

CFStringRef *c = [ar objectAtIndex:4];

あなたはを取得していNSInvalidArgumentExceptionます。インスタンスに送信するobjectAtIndex:メソッドです。NSArrayNSdictionary

2番目のエラーはキャストです。フェルナンドがすでに指摘している__bridgeように、次のようなキーワードを使用してキャストする必要があります。

CFStringRef c = (__bridge CFStringRef)([ar objectAtIndex:4]);

これにより、ARCは、そのオブジェクトをCポインタとして扱っていることを認識します。

CFStringRefまた、次のように定義されていることに注意してください

typedef const struct __CFString * CFStringRef;

したがって、それはすでにポインタであり、を取り除く必要があります*

于 2013-01-03T21:06:37.107 に答える
1

配列ではなくCFDictionaryが返されるようです。リンクした定数は、値にアクセスできる辞書のキーです。

于 2013-01-03T20:58:58.920 に答える