5

Đối với một số lý do mẫu mã này hoạt động:CFPropertyListCreateDeepCopy thất bại trong việc xử lý mảng/từ điển chứa NSNull

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

và mã này tạo ra nil như là kết quả của việc chuyển đổi:

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

Tôi cố gắng để tìm thấy bất kỳ đề cập đến của NSNull không được phép khi sử dụng chức năng này. Tôi có một sự nghi ngờ rằng nó có liên quan đến cách thức kiểm tra xem liệu tài sản có thể thay đổi hay không, nhưng tôi không thể thực sự quay lại với sự thật.

Bất kỳ ý tưởng nào?

Trả lời

6

Là người tử tế từ diễn đàn nhà phát triển Apple đã chỉ ra vấn đề là Cấu trúc danh sách thuộc tính khá nghiêm ngặt về các loại dữ liệu mà nó có thể làm việc. NSNull không phải là một trong những cái được phép.

Từ apple docs:

danh sách tài sản được xây dựng từ Core Foundation loại cơ bản CFString, CFNumber, CFBoolean, CFDate, và CFData.

+0

Bạn có biết cách thay thế hoặc giải pháp khác để chấp nhận giá trị không, bởi vì chúng tôi đang sử dụng dữ liệu này từ API JSON có 'null' ở một số địa điểm? – Sathvik

+1

theo nguồn này http://www.opensource.apple.com/source/CF/CF-1153.18/CFPropertyList.c (tìm kiếm CFPropertyListRef CFPropertyListCreateDeepCopy) nó không hoàn toàn có thể. Có thể thử thay thế null bằng hằng số được xác định trước mà không có khả năng gặp phải trong tập dữ liệu của bạn? –

Các vấn đề liên quan