Iphone NSCFSet objectAtIndex无法识别的选择器,正在迭代

Iphone NSCFSet objectAtIndex无法识别的选择器,正在迭代,iphone,objective-c,selector,Iphone,Objective C,Selector,我想知道迭代NSMutableArray是如何工作的,但是当我调用objectAtIndex时,它失败了,因为“***-[NSCFSet objectAtIndex:]:无法识别的选择器发送到实例0x…” 这里是一些示例代码,程序太大,无法全部共享,所以我希望足够了。该代码在最新的iPhone模拟器XCode中执行 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath

我想知道迭代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];
抱歉,格式不正确,仍在计算中。:)

提前感谢,,
Nick

对象索引:
NSArray
的一部分,而不是
NSSet
。这意味着您的
appDelegate.distribution.conversations
正在返回一个
NSSet
,您需要一个
NSArray
,该异常消息告诉您发送的消息带有一个接收类无法识别或响应的选择器。在这种情况下,您将向类型为
NSCFSet
(或仅
NSSet
)的对象发送
objectAtIndex:
消息


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

多亏了这两者!我已经将它定义为一个NSMutableArray,但是我进一步用[[NSMutableSet alloc]init]初始化了它;xD有时我会错过C(++)的静态类型。这一定是个警告,但我有太多。。。我需要多注意这些。无论如何,非常感谢。是的,没有编辑。这甚至不是一个警告。我想你得小心点。有没有发现此类错误的建议?问题是NSMutableArray的指定初始值设定项——以及NSSet和NSDictionary——被声明为返回(id),因此,任何类上的任何方法都被认为是有效的。这样声明它们的原因是因为Objective-C不支持协变声明。但是,只要您避免(id)类型,Objective-C在支持静态类型分析方面做得很好(我想在前面的注释中添加)。