2012-03-01 38 views
9

Tôi nhận được một số phản hồi từ JSON, và đang làm việc tốt, nhưng tôi cần phải kiểm tra đối với một số null giá trị,ios kiểm tra xem NSArray == null

Tôi đã tìm thấy câu trả lời khác nhau nhưng dường như không hoạt động vẫn còn,

NSArray *productIdList = [packItemDictionary objectForKey:@"ProductIdList"]; 

tôi đã thử với

if (!productIdList.count) //which breaks the app, 

if (productIdList == [NSNull null]) // warning: comparison of distinct pointer types (NSArray and NSNull) 

Vì vậy, những gì đang xảy ra? Làm thế nào để sửa lỗi này và kiểm tra null trong mảng của tôi?

Cảm ơn!

+1

Ý bạn là "phanh ứng dụng"? Nếu nó làm tăng ngoại lệ, hãy đăng thông điệp tường trình. –

Trả lời

31

Loại bỏ cảnh báo sử dụng một dàn diễn viên:

if (productIdList == (id)[NSNull null]) 

Nếu productIdList là trong thực tế [NSNull null], sau đó làm productIdList.count sẽ nâng cao một ngoại lệ vì NSNull không hiểu được thông điệp count.

+0

@MaKo ... và, ngầm định, điều này hoạt động vì '[NSNull null]' luôn trả về cùng một đối tượng. '==' so sánh danh tính, không phải giá trị. – Tommy

+0

Tôi bỏ lỡ các diễn viên để 'id' & đã bỏ lỡ kiểm tra này (bỏ qua nó do cảnh báo trình biên dịch) trong thời gian dài! cảm ơn! – Jean

+0

Perfect .. !! Cảm ơn –

0

bạn phải rõ ràng những gì bạn muốn kiểm tra: mảng là null có nghĩa là biến không tồn tại:


array == nil 

Hoặc mảng có zero yếu tố mà bạn có thể:


[array count] == 0 
+0

Lớp 'NSDictionary' không thể lưu trữ' nil' dưới dạng giá trị, vì vậy các trình phân tích cú pháp JSON (và các trình phân tích danh sách thuộc tính) sử dụng '[NSNull null]' để đại diện cho giá trị null, bởi vì có sự khác biệt giữa một khóa một giá trị null và một khóa không có. –

+0

Bạn nói đúng. Tôi không thấy nó từ JSON. – scorpiozj

+0

Dòng đầu tiên nói tất cả. –

7

Bạn cũng có thể kiểm tra lớp của đối tượng bằng cách sử dụng phương thức isKindOfClass:.

Ví dụ, trong trường hợp của bạn, bạn có thể làm như sau:

if ([productIdList isKindOfClass:[NSArray class]]) 
{ 
    // value is valid 
} 

hoặc (nếu bạn chắc chắn rằng NSNull được biểu diễn giá trị không hợp lệ)

if([productIdList isKindOfClass:[NSNull class]]) 
{ 
    // value is invalid 
} 
+0

Chỉ có một trường hợp đơn lẻ của 'NSNull' để sử dụng' == 'để kiểm tra nó ngắn hơn và hiệu quả hơn. –

+0

Nhưng việc kiểm tra loại đối tượng được trả về là an toàn hơn. – Nekto

6

Bạn có thể sử dụng bộ chọn isEqual:

if ([productIdList isEqual:[NSNull null]]) 
Các vấn đề liên quan