Создание NSDictionary
В следующем коде первый оператор журнала показывает десятичное значение, как ожидалось, но второй журнал NULL. Что я делаю неправильно?
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"]]);
Ответы
Ответ 1
Вы обмениваете заказ, в который вы вставляете объекты и ключ: вам нужно сначала вставить объект, а затем ключ, как показано в следующем примере.
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
Ответ 2
new Objective-c поддерживает этот новый синтаксис для статической инициализации.
@{key:value}
Например:
NSDictionary* dict = @{@"x":@(acceleration.x), @"y":@(acceleration.y), @"z":@(acceleration.z), @"date":[NSDate date]};
Ответ 3
NSDictionary Синтаксис:
NSDictionary *dictionaryName = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@value2",@"key2", nil];
Пример:
NSDictionary *importantCapitals = [NSDictionary dictionaryWithObjectsAndKeys:
@"NewDelhi",@"India",@"Tokyo",@"Japan",@"London",@"UnitedKingdom", nil];
NSLog(@"%@", importantCapitals);
Результат похож,
{India = NewDelhi; Япония = Токио; UnitedKingdom = Лондон; }