[NSCFArray 行]:无法识别的选择器发送到实例 0x3953a20

Posted

技术标签:

【中文标题】[NSCFArray 行]:无法识别的选择器发送到实例 0x3953a20【英文标题】:[NSCFArray row]: unrecognized selector sent to instance 0x3953a20 【发布时间】:2010-06-17 17:51:44 【问题描述】:

我收到此控制台消息崩溃:

由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'*** -[NSCFArray 行]: 无法识别的选择器发送到实例 0x3953a20'

当我滚动浏览从字典数组中获取数据的表时会发生这种情况。

【问题讨论】:

我们可以看一些代码吗?看起来您正在尝试将 NSIndexPath 的行索引传递给 -cellForRowAtIndexPath: 【参考方案1】:

查看崩溃日志的堆栈跟踪以了解此调用的确切位置。

如果您发送 -row 的变量实际上不是作为 NSArray 键入的,则很可能您没有遵循该变量的内存管理规则。这些相同的症状通常是由此引起的。响应 -row 的东西可能曾经存在过,因为你没有 -retain 它而被释放,然后在那个地方分配了一个 NSArray。

运行“构建和分析”并重新查看内存管理指南,直到您在睡梦中了解它们。

【讨论】:

问题是一个名为“row”的变量被某种方式释放了。【参考方案2】:

看起来您正在向NSArray 发送row 消息。 NSArray 类中没有定义行方法。如果您使用的是表格,我猜您想将“行”发送到indexPath 参数以获取位置,然后获取数据数组中该位置的数据:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    // first row will be like 0
    NSUInteger row = [indexPath row];
    // get the same row position in your data array
    id data = [YOUR_DATA_ARRAY objectAtIndex:row];

这将为您提供行的数字位置。一个警告:“行”不是基本 NSIndexPath 类的一部分。这是added as a category in UIKit。

【讨论】:

以上是关于[NSCFArray 行]:无法识别的选择器发送到实例 0x3953a20的主要内容,如果未能解决你的问题,请参考以下文章

-[__NSCFArray bytes]: 无法识别的选择器发送到实例

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[__NSCFArray objectForKey:]:无法识别的选择器发送到实例

ContiguousArrayStorage 行无法识别的选择器发送到实例

快速代码崩溃:“发送到实例的无法识别的选择器”

-[__NSCFDictionary Title]:无法识别的选择器发送到实例

UITableViewController 无法识别的选择器发送到实例