Почему при ошибке BAD_ACCESS возникает следующий результат?Может ли NSDictionary содержать различные типы объектов в качестве значений?
Можете ли вы иметь разные типы объектов как значения в NSDictionary, включая другой NSDictionary?
Почему при ошибке BAD_ACCESS возникает следующий результат?Может ли NSDictionary содержать различные типы объектов в качестве значений?
Можете ли вы иметь разные типы объектов как значения в NSDictionary, включая другой NSDictionary?
Вы можете поместить любой тип объекта в NSDictionary
. Таким образом, хотя @"fred"
в порядке, 1
не является, поскольку целое число не является объектом. Если вы хотите поставить номер в словаре, завернуть его в NSNumber
:
NSDictionary *header = { @"title": @"fred", @"count": @1 };
Не так, как у вас есть. Число 1 является примитивным, а объект NSArray может содержать только объекты. Создайте NSNumber для «1», а затем сохраните его.
NSDictionary
может содержать только объекты Objective-C в нем (например, NSString
и NSArray
), он не может содержать примитивные типы, как int
, float
или char*
. Учитывая эти ограничения, разнородные словари совершенно законны.
Если вы хотите, чтобы включать в себя ряд таких как 1
в качестве ключа или значения, вы должны обернуть его с NSNumber
:
NSDictionary *header=[[NSDictionary alloc] initWithObjectsAndKeys:
@"fred", @"title",
[NSNumber numberWithInt:1], @"count",
nil];
Единственное требование состоит в том, что это является объектом. Это зависит от вас, чтобы правильно обрабатывать объекты в вашем коде, но, по-видимому, вы можете отслеживать их типы на основе ключей.
1 не является объектом. Если вы хотите, чтобы вы ввели номер в словарь, вы можете преобразовать его в NSNumber.
Интересно. Я привык к C#, где все является объектом. Благодарю. – ChrisP