【问题标题】:NSIndexSet indexPassingTest exampleNSIndexSet indexPassingTest 示例
【发布时间】:2016-11-18 18:21:39
【问题描述】:

我似乎找不到合适的示例来说明如何将“indexPassingTest”与 NSIndexSet 一起使用。 我正在尝试与 NSIndexSets 进行比较,以找出差异。我希望使用以下代码:

NSIndexSet *selectionIndexesNew = [change objectForKey:@"new"];
NSIndexSet *selectionIndexesOld = [change objectForKey:@"old"];
NSUInteger newSelection = 0;
newSelection = [selectionIndexesNew indexPassingTest:^BOOL(NSUInteger idx, BOOL *stop) {
    *stop = NO;
    if ([selectionIndexesOld containsIndex:idx] == NO) {
        *stop = YES;
    }
    return idx;
}];

这似乎根本没有遍历我的 NSIndexSet。使用 selectionIndexesNew 中的第一个值,但忽略后续值。我对这个方法的理解是,所有的Index值都是迭代的。还是我错了?

【问题讨论】:

    标签: cocoa nsindexset


    【解决方案1】:

    好的,想通了,就在发布后.. 如果您的 idx 不匹配,您必须返回 NO。如果索引匹配,则传递 YES

    这是似乎有效的代码。 (这还没有经过广泛的测试..)

    NSIndexSet *selectionIndexesNew = [change objectForKey:@"new"];
    NSIndexSet *selectionIndexesOld = [change objectForKey:@"old"];
    NSUInteger newSelection = 0;
    newSelection = [selectionIndexesNew indexPassingTest:^BOOL(NSUInteger idx, BOOL *stop) {
        if ([selectionIndexesOld containsIndex:idx] == NO) {
            *stop = YES;
            return YES;
        }
        return NO;
    }];
    

    【讨论】:

    • "Block 返回一个布尔值,表示 obj 是否通过了测试。"
    • 你要复制containsIndexes:吗?
    • 你是对的。它确实返回一个 BOOL。我不想替换containsIndexes:.. 我想找出选择了哪个索引。我有一个 NSCollectionView,允许多选。我试图找出最近点击的索引。我在selectonIndexes 上有一个观察员。我正在比较更改字典中的新旧键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多