【问题标题】:nsindexpath access to row to section property causes SIGABRT?nsindexpath 对行到部分属性的访问导致 SIGABRT?
【发布时间】:2011-12-05 10:57:02
【问题描述】:

以 iOS 5.0 为目标,当我尝试在以下代码中访问 NSIndexPath 对象的行或部分属性时,我看到了 SIGABRT:

NSIndexPath* path = [[NSIndexPath alloc] initWithIndex:0];
int row = path.row; //SIGABRT
int section = path.section;//SIGABRT

此示例建议使用 indexPathWithIndex: 代替 http://developer.apple.com/library/mac/#samplecode/SourceView/Listings/BaseNode_m.html#//apple_ref/doc/uid/DTS10004441-BaseNode_m-DontLinkElementID_6

path = [NSIndexPath indexPathWithIndex:0];

结果保持一致。有没有人解释为什么会发生这种情况?是不是我们在 iOS 5.0 中不能对 NSIndexPath 进行操作?

提前致谢。

【问题讨论】:

    标签: ios nsindexpath


    【解决方案1】:

    尝试使用indexPathForRow:inSection:创建索引路径

    NSIndexPath* path = [NSIndexPath indexPathForRow:0 inSection:0];
    

    【讨论】:

    • 谢谢。对不起:我第一次通过课堂参考错过了那个笔记。知道为什么他们不在类方法下列出此方法吗?
    • 这是因为这些方法被定义为 NSIndexPath 上的一个类别,而不是 NSIndexPath 类本身。你可以在这里找到文档:developer.apple.com/library/ios/#documentation/uikit/reference/…
    【解决方案2】:

    我唯一能想到的就是确保您将UIKit.framework 作为您的框架之一。您可以通过按目标上“构建阶段”下的“将二进制文件与库链接”部分中的加号按钮来执行此操作。此外,请确保在您尝试访问索引路径的文件中导入 NSIndexPath.h

    我之前遇到过这个问题,现在解决了。这是因为虽然 NSIndexPath 在 Cocoa 和 CocoaTouch 之间是通用的,但 Cocoa 版本没有属性 rowsection

    如果您已经拥有UIKit.framework,请尝试使用[NSIndexPath indexPathForRow:row inSection:section] 而不是[NSIndexPath indexPathWithIndex:index]

    【讨论】:

      【解决方案3】:

      我认为问题在于 indexPathWithIndex: 创建了一个单节点索引路径。与 initWithIndex: 相同。 section 和 row 属性来自 UITableView 类别到 NSIndexPath 类。单节点索引路径不适用于表视图,因为传递给表视图的索引路径必须包含指定节和行的两个索引(根据我在运行代码时收到的错误消息)。下面的代码创建了一个带有两个索引的索引路径,并且运行时不会抛出 NSInternalInconsistencyException:

      NSUInteger x[] = {0 , 0};
      NSIndexPath *path = [[NSIndexPath alloc] initWithIndexes: x length: 2];
      int row = [path row];
      int section = [path section];
      row = path.row;
      section = path.section;
      

      这就是您所说的“在 iOS 5.0 中对 NSIndexPath 进行操作”的意思吗?

      【讨论】:

      • 嗨。感谢您的反馈意见。我不是很清楚。我的意思是对 NSIndexPath 实例数据成员进行操作。 “对对象进行操作”在 C++ 中相当普遍。这不是 obj-c 中的标准约定吗?
      • “对对象进行操作”不是我在 Objective-C 上下文中听到的表达方式。 (就此而言,我不记得在 C++ 的上下文中听到过它。)Objective-C 独有的表达是“向对象发送消息”,这意味着调用对象的实例方法之一。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多