NSCFConstantString objectAtIndex: ошибка в сгруппированной таблице

#ios #objective-c #uitableview #nsdictionary

#iOS #objective-c #uitableview #nsdictionary

Вопрос:

У меня есть словарь, который выглядит следующим образом (страница настроек):

 Logout = Logout;
Social =     (
    Facebook,
    Twitter
);
Terms =     (
    "Privacy Policy",
    "Terms of Service"
);
  

Затем правильно упорядоченный массив:

 `Social, Terms, Logout`
  

Сейчас у меня есть три раздела. Из cellForRowAtIndexPath я пытаюсь это сделать:

 cell.textLabel.text = [[_settingsOptions objectForKey:
    [_arrayKeys objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row];
  

И я получаю ошибку NSCFConstantString. Когда я вручную ввожу числа для индексов, все отображается нормально. Но из метода источника данных я получаю эту ошибку. Может кто-нибудь найти ошибку?

Комментарии:

1. Является ли значение строки Logout = Logout также массивом?

2. @MABVT Вы правы… когда я создавал словарь, я не [NSArray arrayWithObject:] использовал опцию «Выход из системы»… спасибо за предложение!

3. NSLog() словарь и укажите это в вопросе. Кроме того, разбейте один оператор на отдельные промежуточные операторы, это упрощает отладку и понимание. См. Пример «отсутствие ответа».

Ответ №1:

Пример кода в качестве ответа (которого нет) для форматирования:

 NSString *s1 = [_arrayKeys objectAtIndex:indexPath.section];
NSArray  *s2 = [_settingsOptions objectForKey:s1];
NSString *text = [s2 objectAtIndex:indexPath.row];
cell.textLabel.text = text;
  

Реальный код будет иметь фактические типы (как я догадался) и описательные имена вместо s1 s2, text .
Простое указание промежуточных типов и описательных имен может сделать ошибку понятной.

Теперь каждый шаг может быть независимо отлажен и при желании NSLog’ed.