Может ли NSDictionary содержать различные типы объектов в качестве значений? - PullRequest
7 голосов
/ 24 января 2012

Почему следующий результат приводит к ошибке BAD_ACCESS?

NSDictionary *header=[[NSDictionary alloc]initWithObjectsAndKeys:@"fred",@"title",1,@"count", nil];

Можете ли вы иметь различные типы объектов в качестве значений в NSDictionary, включая другой NSDictionary?

Ответы [ 4 ]

15 голосов
/ 24 января 2012

Вы можете поместить любой тип объекта в NSDictionary.Таким образом, хотя @"fred" в порядке, 1 нет, так как целое число не является объектом.Если вы хотите поместить число в словарь, оберните его в NSNumber:

NSDictionary *header = { @"title": @"fred", @"count": @1 }; 
0 голосов
/ 24 января 2012

Единственное требование - это быть объектом. Вы должны правильно обрабатывать объекты в вашем коде, но, вероятно, вы можете отслеживать их типы на основе ключей.

1 не является объектом. Если вы хотите поместить число в словарь, вы можете преобразовать его в NSNumber.

0 голосов
/ 24 января 2012

NSDictionary может содержать только объекты Objective-C (например, NSString и NSArray), он не может содержать примитивные типы, такие как int, float или char*. Учитывая эти ограничения, разнородные словари совершенно законны.

Если вы хотите включить число, например 1, в качестве ключа или значения, вы должны заключить его в NSNumber:

NSDictionary *header=[[NSDictionary alloc] initWithObjectsAndKeys:
    @"fred", @"title",
    [NSNumber numberWithInt:1], @"count",
    nil];
0 голосов
/ 24 января 2012

Не так, как у вас есть.Число 1 является примитивом, и объект NSArray может содержать только объекты.Создайте NSNumber для «1», а затем он сохранит его.

...