2012-09-16 54 views
5

Tôi có một biến được gọi là tham dự đang được kéo từ nguồn cấp dữ liệu JSON. Sau khi kiểm tra những gì lớp loại đối tượng đang được hiểu là tôi NSLog này:kiểm tra giá trị boolean từ điển.

attending var type is: __NSCFBoolean 

này được thực hiện sử dụng [varname lớp] để có được những kiểu lớp của biến.

Vì vậy, tôi muốn để xem nếu điều này là đúng hay sai .... vì vậy tôi viết mã này ..:

if([[_events objectAtIndex:indexPath.row] objectForKey:@"attending"] == YES){ 

Tuy nhiên tôi không thể biên dịch nó bởi vì nó mang lại cho tôi một lỗi văn bản vàng nói điều này:

enter image description here

Tôi đang làm gì sai? Làm thế nào tôi có thể sửa lỗi này. Chỉ cần thêm dữ liệu trong thức ăn trông như thế này:

{ 
    attendees =   (
    ); 
    attending = 1; 
    date = "2012-09-24 09:11:00"; 
    id = 504; 
    lessonHTML = "somehtml."; 
    name = "Sup"; 
    youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0"; 
}, 
    { 
    attendees =   (
    ); 
    attending = 1; 
    date = "2012-09-24 09:11:00"; 
    id = 503; 
    lessonHTML = "somehtml."; 
    name = "Sup"; 
    youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0"; 
}, 
    { 
    attendees =   (
    ); 
    attending = 0; 
    date = "2012-09-24 09:11:00"; 
    id = 508; 
    lessonHTML = "somehtml."; 
    name = "Sup"; 
    youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0"; 
}, 
    { 
    attendees =   (
    ); 
    attending = 1; 
    date = "2012-09-24 09:11:00"; 
    id = 509; 
    lessonHTML = "somehtml."; 
    name = "Sup"; 
    youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0"; 
}, 
    { 
    attendees =   (
    ); 
    attending = 0; 
    date = "2012-09-24 09:11:00"; 
    id = 505; 
    lessonHTML = "somehtml."; 
    name = "Sup"; 
    youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0"; 
}, 
    { 
    attendees =   (
    ); 
    attending = 1; 
    date = "2012-09-24 09:11:00"; 
    id = 506; 
    lessonHTML = "somehtml."; 
    name = "Sup"; 
    youtubeId = "http://www.youtube.com/watch?v=j1vb4cND3G0"; 
}, 

Trả lời

18

Boolean trong từ điển và container khác lớp học được đóng gói trong NSNumber đối tượng (xem tài liệu NSNumber cho thêm thông tin)

Để trích xuất giá trị bạn cần gửi thông báo boolValue cho đối tượng trieved từ điển và so sánh nó với YES/NO:

NSNumber* attendingObject = [[events objectAtIndex:indexPath.row] objectForKey:@"attending"]; 
if ([attendingObject boolValue] == YES) 
{ 
    ... 
} 

Đọc thêm về giá trị và cách thức chúng được đóng gói các lớp học tập tôi in the Apple documentation here

+0

bạn thưa ông là một huyền thoại! Câu hỏi của tôi được trả lời và nhiệm vụ của tôi đã hoàn thành. bạn đạt được 100 kinh nghiệm. – jimbob

+0

vui lòng trợ giúp ;-) – AliSoftware

+0

trợ giúp tuyệt vời, cảm ơn. Tôi tự hỏi điều này đã trở thành nhanh như thế nào 1, 2 hoặc 3 ... – eddyce

2

một "BOOL" loại không phải là một đối tượng C Mục tiêu mà thay vào đó một loại C-phong cách.

Được lưu trữ trong từ điển dưới dạng đối tượng "NSNumber".

Vì vậy, những gì bạn cần làm thay vì:

if([[_events objectAtIndex:indexPath.row] objectForKey:@"attending"] == YES){ 

là một cái gì đó như thế này:

BOOL attending = NO; // assume NO to start with 
NSDictionary * lessonDictionary = [_events objectAtIndex: indexPath.row]; 
if(lessonDictionary) 
{ 
    NSNumber * attendingObject = [lessonDictionary objectForKey: @"attending"]; 
    if(attendingObject) 
    { 
      attending = [attendingObject boolValue]; 
    } 
} 
Các vấn đề liên quan