2016-11-18 39 views
0

我似乎無法找到一個合適的示例如何使用「indexPassingTest」與NSIndexSet。 我想比較NSIndexSets,以找到差異。我希望使用下面的代碼:NSIndexSet indexPassingTest example

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的第一個值,但後續值將被忽略。我對這種方法的理解是所有的索引值都是迭代的。或者我錯了嗎?

回答

0

好吧,算出來,發佈後立即.. 如果您的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; 
}]; 
+0

「塊返回一個布爾值,指示obj是否通過了測試。」 – Willeke

+0

你想重複'containsIndexes:'? – Willeke

+0

你在這一個是正確的。它確實返回一個BOOL。 我不想替換'containsIndexes:'..我試圖找出哪個索引被選中。我有一個NSCollectionView,允許多選。我想弄清楚哪個索引是最近點擊的。我有一個關於'selectonIndexes'的觀察者。我正在比較更改字典中的新舊鍵。 –