5

を含む配列/辞書を処理するために失敗:CFPropertyListCreateDeepCopyは、このサンプル・コードは動作何らかの理由nsnullを

NSArray *immutable = @[ @"a", @"b", @"c" ]; 
NSMutableArray *mutable = (__bridge id)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (__bridge CFArrayRef)immutable, kCFPropertyListMutableContainers); 

このコードは、変換の結果としてnil生成:

NSArray *immutable = @[ @"a", [NSNull null], @"c" ]; 
NSMutableArray *mutable = (__bridge id)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (__bridge CFArrayRef)immutable, kCFPropertyListMutableContainers); 

私が見つけることを試みましたこの関数を使用するときにはNSNullの言及は許可されていません。私は、方法がプロパティが変更可能かどうかを調べる方法と関係があるとの疑いを持っていますが、実際にそれを裏付けることはできません。

アイデア?

答えて

6

アップルの開発者フォーラムの人たちが指摘するように、プロパティリスト構造は、操作できるデータ型についてかなり厳密です。 NSNullは許可されたものではありません。 apple docsから

プロパティリストは、基本的なCore FoundationのタイプCFStringCFNumberCFBooleanCFDate、そしてCFDataから構成されています。

+0

ヌル値を受け入れるための代替方法または回避策がありますか?これは、一部の場所でヌルを持つJSON APIのデータに使用しているためですか? – Sathvik

+1

このソースによるとhttp://www.opensource.apple.com/source/CF/CF-1153.18/CFPropertyList.c(CFPropertyListRef CFPropertyListCreateDeepCopyの検索)はそれほど可能ではありません。おそらくデータセットで遭遇する可能性の低い定義済みの定数でnullを置き換えてみてください。 –

関連する問題