2012-05-18 21 views
12

trên mã sau đây tôi nhận được sự thất bại: Implicit chuyển đổi 'int' thành 'NSNumber *' không được phép với ARC.iOS Implicit chuyển đổi int để NSNumber không được phép với ARC

Tôi đang làm gì sai?

<pre> 
<code> 
    NSDictionary *results = [jsonstring JSONValue]; 
    NSNumber *success = [results objectForKey:@"success"]; // possible values for "success": 0 or 1 

    if (success == 1) { // ERROR implicit conversion of int to NSNumber disallowed with ARC  
    } 
</code> 
</pre> 

Cảm ơn bạn đã được trợ giúp hoặc gợi ý!

trọng, Daniel

Trả lời

14

Bạn nên sử dụng [success intValue] == 1. Một NSNumber là một lớp, vì vậy số là một con trỏ, không phải là giá trị trực tiếp.

+0

Cảm ơn bạn! Nó hoạt động. – Raja

25

Erro vì bạn đang so sánh NSNumber với int.

Hãy thử như -

if ([success isEqual:[NSNumber numberWithInt:1]]) 

hoặc

if ([success intValue] == 1) 
+1

Việc so sánh đầu tiên là sai, bạn so sánh con trỏ giá trị của các đối tượng riêng biệt. Bạn muốn '[success isEqual: [NSNumber numberWithInt: 1]]' hoặc tốt hơn, so sánh thứ hai. – DarkDust

+0

Cảm ơn bạn đã chỉ ra điều đó, tôi sẽ chỉnh sửa điều này. – rishi

3

NSNumber là một đối tượng (nghĩa là một con trỏ), vì vậy bạn không thể chỉ so sánh nó với một số nguyên như 1. Thay vào đó bạn phải trích xuất các giá trị int từ đối tượng số:

if ([success intValue] == 1) { 
    ... 
} 
1

Nếu success nên chỉ ra một boolean, bạn có thể muốn thử loại này

NSDictionary *results = [jsonstring JSONValue]; 
NSNumber *success = [results objectForKey:@"success"]; 

if ([success boolValue]) { 
    // success! 
} 
Các vấn đề liên quan