2011-01-25 31 views
13

Làm cách nào để kiểm tra xem NSInteger có hợp lệ không?NSInteger! = Nil

NSInteger previousScore = [[self score] integerValue]; 
    if (previousScore != nil) { 
     //do something 
    } 
+0

lời chào đã xóa: "Cảm ơn bạn trước"., Đừng làm điều đó vào lần sau –

Trả lời

14

Nếu bạn muốn kiểm tra tính hợp lệ trong mã của bạn, bạn muốn làm điều gì đó như:

NSNumber *previousScore = [self score]; 

if (previousScore != nil) { 
    NSInteger previousScoreValue = [previousScore integerValue]; 
    // do something 
} 

này hoạt động như bạn đang nhận lại một đối tượng, không phải là một giá trị nguyên thủy.

+0

Cảm ơn. Ý tưởng tuyệt vời. Tôi đọc vào và ra khỏi plist vì vậy tất cả mọi thứ trong mảng phải được NSNumber. – intomo

12

NSInteger không phải là một đối tượng. Nó chỉ đơn giản là một nguyên mẫu được nhập sẵn int. Do đó, nó sẽ không bao giờ là nil. Chỉ cần đối xử với nó giống như khi bạn đang sử dụng int thẳng lên.

Edit: Để expound khi bình luận của Cesar, trên các hệ thống 64-bit NSInteger thực sự là một long và trên các hệ thống 32-bit nó là một int.

+2

được định nghĩa là: #if __LP64__ typedef long NSInteger; #else typedef int NSInteger; endif –

+5

Thực ra theo mặc định trong nhiều trường hợp, NSInteger sẽ là nil, vì nil giống với số không ... bạn cũng có thể nhận được cảnh báo trình biên dịch. Trong mã mẫu cho trướcScore sẽ là 0 (nil) nếu [tự điểm] trở lại nil ... –

+0

không may, nil là 0. hãy thử "po nil == 0" trong trình gỡ lỗi. Nó in "true" – nont

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