NSCFSet objectAtIndex нераспознанный селектор, повторяющиеся работы - PullRequest
0 голосов
/ 29 ноября 2009

Мне было интересно, как может быть, что итерация через NSMutableArray работает, но когда я вызываю objectAtIndex, он завершается неудачно с "*** - [NSCFSet objectAtIndex:]: нераспознанный селектор, отправленный экземпляру 0x ..."

Вот пример кода, программа слишком большая, чтобы делиться ею целиком, поэтому я надеюсь, что этого достаточно. Код выполнен в последнем симуляторе iPhone от XCode.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 RDLogString(@"Creating cell @ row no. %d", indexPath.row);
 CPPlayerAppDelegate * appDelegate = [[UIApplication sharedApplication] delegate];
 RDLogString(@"Conversations: %p. Item count: %d", appDelegate.distribution.conversations, appDelegate.distribution.conversations.count);  
 //This works  
 for(CPConversation * x in appDelegate.distribution.conversations){
  RDLogString(@"Pointer: %p with name %@", x, x.name);
 }  
 //This fails with aforementioned error  
 CPConversation * conversationAtCurrentIndex = [appDelegate.distribution.conversations objectAtIndex: indexPath.row];

Извините за плохое форматирование, все еще выясняю это. :)

Спасибо заранее, Ник

Ответы [ 2 ]

1 голос
/ 29 ноября 2009

objectAtIndex: является частью NSArray, а не NSSet. Это означает, что ваш appDelegate.distribution.conversations возвращает NSSet и вам нужен NSArray.

0 голосов
/ 29 ноября 2009

Это сообщение об исключении говорит вам, что вы отправляете сообщение с селектором, который получающий класс не распознает или не отвечает. В этом случае вы отправляете сообщение objectAtIndex: объекту типа NSCFSet (или просто NSSet).

Это означает, что независимо от того, appDelegate.distribution.conversations, вы ожидаете, что это NSArray, но на самом деле это NSSet. Как вы создаете доступ к объекту?

...