NSCFSet objectAtIndex无法识别的选择器,迭代工作

时间:2009-11-29 00:08:35

标签: iphone objective-c selector

我想知道如何通过NSMutableArray迭代工作,但是当我调用objectAtIndex时,它失败了“*** - [NSCFSet objectAtIndex:]:无法识别的选择器被发送到实例0x ......”

以下是一些示例代码,程序太大而无法全部共享,所以我希望它足够了。代码在XCode的最新iPhone模拟器中执行。

- (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 个答案:

答案 0 :(得分:1)

objectAtIndex:NSArray的一部分,而不是NSSet。这意味着您的appDelegate.distribution.conversations正在返回NSSet,您需要NSArray

答案 1 :(得分:0)

该异常消息告诉您正在发送带有接收者无法识别或响应的选择器的消息。在这种情况下,您要向objectAtIndex:类型的对象(或仅NSCFSet)发送NSSet条消息。

这意味着无论appDelegate.distribution.conversations是什么,你都期望它是一个NSArray,但它实际上是一个NSSet。你是如何创建那里访问的对象的?