[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 行无法识别的选择器发送到实例