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

正如蘋果開發人員論壇上的善良人士指出的那樣,問題在於Property List Structure對於可以使用的數據類型相當嚴格。 NSNull不是允許的之一。

apple docs

屬性列表是從基本的核心基礎類型CFStringCFNumberCFBooleanCFDateCFData構建。

+0

您是否知道接受空值的替代方法或解決方法,因爲我們正在使用來自JSON API的數據,該JSON API在某些地方具有'null'? – Sathvik

+1

根據這個源http://www.opensource.apple.com/source/CF/CF-1153.18/CFPropertyList.c(搜索CFPropertyListRef CFPropertyListCreateDeepCopy)這是不可能的。也許嘗試用您的數據集中不太可能遇到的預定義常量替換null? –