2013-12-12 4 views
-1

Я пытаюсь создать список параметров, которые мне нужно передать в стороннюю библиотеку. Объект должен быть объектом NSDictionary. Я очень новичок в разработке Objective-C/iOS.Инициализировать NSDictionary двумя ключами, значения

NSDictionary* parameters = [NSDictionary dictionaryWithObjects: 
        [NSArray arrayWithObjects:@"parameter1",@"parameter2", nil] 
      forKeys: [NSArray arrayWithObjects:"value1", "value2", nil]]; 

Код компилируется правильно, но отладчик останавливается на этой линии со следующим сообщением «Тема 1: EXC_BAD_ACCESS».

До этого, поскольку мне нужен только один параметр, я использовал эту строку и работал нормально.

NSDictionary* parameters = [NSDictionary dictionaryWithObject:phoneNumber forKey:@"parameter1"] 

Любые другие альтернативы, которые я мог бы использовать для нескольких параметров?

+0

Yep, arrayWithObjects не очень доволен указателями ввода 'char *'. (Вероятно, было предупреждение о компиляторе.) –

ответ

6

У вас есть ключи и значения назад. Это гораздо проще в использовании современного синтаксиса:

NSDictionary *parameters = @{ @"parameter1" : @"value1", @"parameter2" : @"value2" };`. 

И как Вайн указывал, у вас есть C-строка, а не NSString объектов для ваших ценностей.

+0

Спасибо, это сработало хорошо. Это намного проще с новым синтаксисом! –

4

Эта линия:

[NSArray arrayWithObjects:"value1", "value2", nil] 

неправильно и должно быть:

[NSArray arrayWithObjects:@"value1", @"value2", nil] 

Вы должны также проверить порядок параметров (вы смотрите получили ключи и значения перепутаете).

0

Другие объяснили проблему с вашим кодом как написано.

Еще один момент: вы используете, возможно, самый подробный, неудобный синтаксис для создания словаря. С появлением Objective C 2.0, вы можете использовать гораздо более компактный синтаксис:

NSDictionary * Параметры = @ { @ "параметра 1": @ "значению1", @ "PARAMETER2": @ "значение2"};

В этом синтаксисе используется более интуитивный ключ: порядок значений.

Проведите поиск по «Objective C literals», чтобы узнать больше.

+1

FYI - Я указал на этот новый синтаксис в своем ответе. – rmaddy

+0

Yup. Похоже, наши ответы «перешли по почте», –

Смежные вопросы