-4

我是mac开发的新手。我在Objective c中升级了框架代码。我像这样更改代码。

    NSEnumerator *e = (NSEnumerator *)[oOutlineView selectedRowIndexes];
    NSNumber *cur;

    while ((cur = [e nextObject]))
    {
      CKDirectoryNode *node = [oOutlineView itemAtRow:[cur intValue]];
      [selection addObject:node];
      fullPath = [node path];
    }

其中 [oOutlineView selectedRowIndexes] 给出 NSIndexSet 对象。我无法运行此代码,因为目标是框架。这样好吗?请帮我。

4

4 回答 4

2

我的问题通过这种方法解决了。

- (void) goThroughIndexSet:(NSIndexSet *) anIndexSet
{
  NSUInteger idx = [anIndexSet firstIndex];

  while (idx != NSNotFound)
  {
      // do work with "idx"
      NSLog (@"The current index is %u", idx);

     // get the next index in the set
     idx = [anIndexSet indexGreaterThanIndex:idx];
  }

  // all done
}

谢谢大家。

于 2013-06-06T09:52:50.543 回答
2

不,这行不通。NSIndexSet 不是枚举数,不能作为一个枚举数使用。要枚举一个,您可以使用 enumerateIndexesUsingBlock: 方法或使用 firstIndex 和 indexGreaterThanIndex:

但是如果你不能运行你的代码,你就会遇到更大的问题。您应该做的第一件事是找到运行它的方法。您应该创建一个单元测试目标并添加运行代码的测试并检查它是否产生正确的结果。如果您不能这样做,您至少需要创建一个使用您的框架的常规应用程序目标。

于 2013-06-06T09:25:57.193 回答
1

您不会强制NSArray(not NSDictionrary, nor NSIndexSet, nor NSIndexPath)NSEnumerator来迭代它们。(你以前经常使用 .net 吗?)

在大多数情况下(尽管这不起作用) NSIndexSetNSIndexPath您只需:

for (id object in collection)
{
    // ...
}

并且编译器将为您生成适当的代码(甚至比NSEnumerator!这直接对集合的内部状态进行操作。)

而且由于您的目标是一个框架(即动态库),您必须要么

  • 编写可执行文件,或
  • 编写单元测试

来测试一下。

于 2013-06-06T09:42:47.697 回答
0

不,它不是:NSIndexSet不是NSEnumerator. 如果要枚举索引集中的索引,请参阅此 Apple 文档页面,以及其下方的“索引集和块”部分。

于 2013-06-06T09:25:44.663 回答