2009-10-22 29 views
12

Đoạn mã sau:Làm thế nào để thiết lập đúng giá trị số nguyên trong NSDictionary?

NSLog(@"userInfo: The timer is %d", timerCounter); 

NSDictionary *dict = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:timerCounter] forKey:@"timerCounter"]; 

NSUInteger c = (NSUInteger)[dict objectForKey:@"timerCounter"]; 
NSLog(@"userInfo: Timer started on %d", c); 

tạo ra dọc theo dòng: (. FWIW, timerCounter là một NSUInteger)

2009-10-22 00:36:55.927 TimerHacking[2457:20b] userInfo: The timer is 1 
2009-10-22 00:36:55.928 TimerHacking[2457:20b] userInfo: Timer started on 5295968 

Tôi chắc rằng tôi đang thiếu một cái gì đó khá rõ ràng, chỉ cần không chắc chắn nó là gì.

Trả lời

22

Bạn nên sử dụng intValue từ đối tượng nhận (một NSNumber), và không sử dụng một dàn diễn viên:

NSUInteger c = [[dict objectForKey:@"timerCounter"] intValue]; 
+5

Thực tế, đối với NSUInteger, bạn nên sử dụng '-unsignedIntegerValue'. –

+2

(Và '+ [NSNumber numberWithUnsignedInteger:]' để tạo NSNumber, nếu nó thực sự có nghĩa là để được unsigned.) – Wevah

+0

Bạn có thể sử dụng '@ (timerCounter)' thay vì '[NSNumber numberWithInteger: timerCounter]' – fpg1503

11

điển luôn đối tượng cửa hàng. NSInteger và NSUInteger không phải là đối tượng. Từ điển của bạn đang lưu trữ một số NSNumber (hãy nhớ rằng [NSNumber numberWithInteger:timerCounter]?), Là một đối tượng. Vì vậy, như epatel nói, bạn cần phải yêu cầu NSNumber cho unsignedIntegerValue của nó nếu bạn muốn một NSUInteger.

0

Hoặc như thế này với literals:

NSUInteger c = ((NSNumber *)dict[@"timerCounter"]).unsignedIntegerValue; 

Bạn phải chọn vào vai NSNumber đầu tiên là đối tượng kéo từ điển sẽ id_nullable và như vậy sẽ không đáp ứng với giá trị chuyển đổi phương pháp.

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