Озадаченный попыткой установить cell.image, используя UIImage: imageNamed: - PullRequest
1 голос
/ 02 июня 2009

Я создал plist, который содержит структуру NSDictionary. Ключ - это метка (которую я использую для заполнения tableview cell.text), а значение - это имя файла, которое я хочу использовать для «динамического» заполнения cell.image. Точные имена файлов png загружаются в проект.

Чтобы упростить ситуацию (как я думал), я загружаю plist в NSDictionary, а затем разделяю его на два массива (используя allKeys и allValues).

Пытаясь установить изображение ячейки, я не понимаю, почему это работает:

cell.image = [UIImage imageNamed:@"bad.png"];

а это не так (в симуляторе - у меня происходит сбой приложения и перебор в отладчике):

cell.image = [UIImage imageNamed:[rowImageList objectAtIndex:indexPath.row]];

Я могу поместить эту следующую строку прямо перед вторым фрагментом кода, и она прекрасно работает, поэтому кажется, что я получаю NSString из objectAtIndex:

NSLog(@"Image name: %@", [rowImageList objectAtIndex:indexPath.row]);

Я также пытался создать временную NSString и присвоить ей [rowImageList objectAtIndex:], а затем использовать эту NSString для предоставления imageNamed:.

Вот некоторая информация от отладчика:

- [Длина NSCFArray]: нераспознанный селектор отправлен в экземпляр 0x262d910

Завершение работы приложения из-за отсутствия связи исключение NSInvalidArgumentException, причина: '*** - [длина NSCFArray]: не распознан селектор отправлен на экземпляр 0x262d910 '

Дайте мне знать, если вам нужна дополнительная информация / код.

Редактировать: вот как я заполняю rowImageList:

NSArray *myRowImages = [[NSArray alloc] init]; 
myRowImages = [searchFilterList allValues]; 
self.rowImageList = [myRowImages copy]; 
[myRowImages release]; 
//where searchFilterList is an NSDictionary that I loaded from a plist

Вот скриншот моего plist: [IMG] [http://i42.tinypic.com/14uwffa.jpg] 1 [/ IMG] * +1032 *

Редактировать: пересмотренный список rowImageList:

 NSMutableArray *myRowImages = [[NSMutableArray alloc] init];
 NSEnumerator *enumerator = [searchFilterList objectEnumerator];
 id object;

 while ((object = [enumerator nextObject])) {
     [myRowImages addObject:[object objectAtIndex:0]];
 }
 self.rowImageList = myRowImages; //edit: added self. prefix
 [myRowImages release];

Ответы [ 3 ]

1 голос
/ 02 июня 2009

Эта ошибка означает, что [rowImageList objectAtIndex: indexPath.row] возвращает массив, а не строку, как ожидалось.

Причина, по которой печатается значение, заключается в том, что для печати массива также необходимо указать% @ в операторе NSLog.

Попробуйте отладить метод и проверьте класс [rowImageList objectAtIndex: indexPath.row]. Скорее всего, это будет массив.

1 голос
/ 02 июня 2009

Я бы дважды проверил вывод NSLog () и убедился, что это не массив, содержащий NSString. Вот что говорит вам ошибка; вы передаете NSArray, где ожидается NSString.

0 голосов
/ 02 июня 2009

Вы уверены, что ваш plist - это пары ключ / строка, и вы как-то не обернули имена в массив?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...