Сообщение об ошибке немного загадочно, но в основном оно говорит о том, что вы пытались отправить сообщение «objectForKey:» объекту класса «NSString», и этот метод не существует в классе NSString. Похоже, вы программно захватываете объект и ожидаете, что этот объект будет NSDictionary. Во время выполнения ваш NSDictionary * фактически устанавливается в NSString *, и вы не получите исключение, пока этот объект фактически не будет использован неправильно.
Тот факт, что вы можете сказать «дайте мне этот объект неизвестного типа, предположить, что это словарь и вызвать эту функцию», на самом деле довольно крутой, когда вы освоитесь с Objective-C, но привыкнуть к нему адски. Я всегда обнаруживал, что Objective-C предполагает, что вы знаете, что делаете. Некоторые люди любят это, потому что это позволяет им писать чистый, краткий код - но это немного повышает кривую изучения.
Не стесняйтесь опубликовать фрагмент кода, если вам нужна дополнительная помощь в отслеживании этого кода!
UPDATE:
Похоже, когда вы настраиваете свои данные в viewDidLoad:, вы загружаете кучу массивов из отдельных файлов. Затем вы добавляете содержимое этих массивов в ваш основной массив данных следующим образом:
[listOfItems addObjectsFromArray:arrayStructuresF];
Я думаю, что эти строки не должны быть там. Далее вы создаете словари для каждой буквы, а затем добавляете эти в listOfItems. В конце функции listOfItems содержит целую кучу строковых элементов И целую кучу словарей. Строковые элементы идут первыми, поэтому вы получаете NSStrings, когда ожидаете NSDictionaries.
P.S. Возможно, вы захотите сжать часть этого в циклы, как только все это заработает. Вы можете создать массив букв A, B, C, D и т. Д., А затем загрузить все файлы в цикле, используя имена файлов, созданные с помощью stringWithFormat: NSString. Просто мысль!