2009-07-10 23 views
29

Trong đoạn mã sau, câu lệnh nhật ký đầu tiên hiển thị số thập phân như mong đợi, nhưng các bản ghi thứ hai NULL. Tôi đang làm gì sai?Tạo một NSDictionary

NSDictionary *entry = [[NSDictionary alloc] initWithObjectsAndKeys: 
    @"x", [NSNumber numberWithDouble:acceleration.x], 
    @"y", [NSNumber numberWithDouble:acceleration.y], 
    @"z", [NSNumber numberWithDouble:acceleration.z], 
    @"date", [NSDate date], 
    nil]; 
NSLog([NSString stringWithFormat:@"%@", [NSNumber numberWithDouble:acceleration.x]]); 
NSLog([NSString stringWithFormat:@"%@", [entry objectForKey:@"x"]]); 
+2

Trên một lưu ý không liên quan, các [NSString stringWithFormat:] bit là không cần thiết, và có khả năng gây hại. Bạn nên gọi NSLog như thế này: NSLog (@ "% @", [entry objectForKey: @ "x"]) ;. Tham số đầu tiên cho NSLog là một chuỗi định dạng, mà chỉ cần luôn luôn là một chữ. –

Trả lời

103

Bạn đang trao đổi thứ tự mà bạn chèn các đối tượng và quan trọng: bạn cần phải chèn đầu tiên đối tượng, rồi bấm phím như trong ví dụ sau.

NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil]; 
+1

Nếu giá trị của bạn đang được đặt động, hãy chú ý thêm nếu bất kỳ giá trị nào là rỗng. Điều này có thể làm cho việc tạo từ điển của bạn dừng ở giữa, vì 'nil' được gửi trong phương thức gửi. Thực hiện xác nhận nếu cần. 'NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys: @" value1 "? Nil: @" ", @" key1 ", @" value2 "? Nil: @" ", @" key2 ", nil];' –

5

NSDictionary Cú pháp:

NSDictionary *dictionaryName = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@value2",@"key2", nil]; 

Ví dụ:

NSDictionary *importantCapitals = [NSDictionary dictionaryWithObjectsAndKeys: 
@"NewDelhi",@"India",@"Tokyo",@"Japan",@"London",@"UnitedKingdom", nil]; 
NSLog(@"%@", importantCapitals); 

Output trông như,

{India = NewDelhi; Nhật Bản = Tokyo; UnitedKingdom = London; }

14

new Objective-c hỗ trợ cú pháp mới này cho khởi tạo tĩnh.

@{key:value} 

Ví dụ:

NSDictionary* dict = @{@"x":@(acceleration.x), @"y":@(acceleration.y), @"z":@(acceleration.z), @"date":[NSDate date]}; 
+0

' [Số NSNumberWithDouble: acceleration.x] 'có thể viết ngắn hơn là' @ (acceleration.x) ' –

+0

@ Sega-Zero Cảm ơn. Tôi đã cập nhật câu trả lời. – Nemo

+0

cú pháp này rất tuyệt vời khi làm việc với JSON – EFE