5

içeren dizi/sözlüğünü işlemek başarısız:CFPropertyListCreateDeepCopy Bu örnek kod çalışır Nedense NSNull

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

ve bu kod dönüşüm sonucunda nil üretir: Ben bulmaya çalıştım

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

Bu işlevi kullanırken NSNull numaralı telefona herhangi bir şekilde izin verilmez. Yöntemin mülkün değişebilir olup olmadığını incelediğine dair bir şeye sahip olduğumdan şüphe duyuyorum, ama bunu gerçeklerle destekleyemem.

Herhangi bir fikrin var mı?

cevap

6

Apple geliştirici forumundan insanlar, konuyla ilgili olarak, Mülkiyet Listesi Yapısının çalışabileceği veri türleri konusunda oldukça katı olduğu konusuna işaret ediyor. NSNull, izin verilenlerden biri değildir. apple docs itibaren

:

Mülkiyet Listede temel Çekirdek Vakfı tipleri CFString, CFNumber, CFBoolean, CFDate ve CFData inşa edilir.

+0

Null değeri kabul etmek için bir alternatif veya bir çözüm biliyor musunuz, çünkü bazı yerlerde null olan bir JSON API'sinden veri kullanıyoruz. Bu kaynağa göre – Sathvik

+1

http://www.opensource.apple.com/source/CF/CF-1153.18/CFPropertyList.c (CFPropertyListRef CFPropertyListCreateDeepCopy için arama) oldukça olası değildir. Belki veri kümenizde karşılaşılması muhtemel olmayan önceden tanımlanmış sabit ile null değiştirmeyi deneyebilirsiniz? –

İlgili konular