Я получаю выбирать элементы из представления таблицы с:Как получить индексы из NSIndexset в NSArray в какао?
NSIndexSet *selectedItems = [aTableView selectedRowIndexes];
, что это лучший способ, чтобы получить индексы в объекте NSArray?
Я получаю выбирать элементы из представления таблицы с:Как получить индексы из NSIndexset в NSArray в какао?
NSIndexSet *selectedItems = [aTableView selectedRowIndexes];
, что это лучший способ, чтобы получить индексы в объекте NSArray?
Перечислите множество, внесите NSNumbers из индексов, добавьте NSNumbers в массив.
Вот как вы это сделаете. Я не уверен, что я вижу, что преобразование набора индексов в менее эффективное представление.
Чтобы перечислить набор, у вас есть два варианта. Если вы настроите OS X 10.6 или iOS 4, вы можете использовать enumerateIndexesUsingBlock:
. Если вы ориентируетесь на более ранние версии, вам нужно будет получить firstIndex
, а затем продолжить просить indexGreaterThanIndex:
по предыдущему результату, пока не получите NSNotFound
.
вы правы, я просто не знаю, как получить индексы из NSIndexSet с циклом while или циклом foreach .... –
Это в документах: http://developer.apple.com/library /mac/#documentation/Cocoa/Conceptual/Collections/Articles/index.html%23//apple_ref/doc/uid/TP40010165-SW4 – Wevah
@Wevah идеальный человек !!! –
NSIndexSet *selectedItems = [aTableView selectedRowIndexes];
NSMutableArray *selectedItemsArray=[NSMutableArray array];
[selectedItems enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
[selectedItemsArray addObject:[NSNumber numberWithInteger:idx]];
}];
С быстрым вы можете сделать следующее
extension NSIndexSet {
func toArray() -> [Int] {
var indexes:[Int] = [];
self.enumerateIndexesUsingBlock { (index:Int, _) in
indexes.append(index);
}
return indexes;
}
}
, то вы можете сделать
selectedItems.toArray()
Не могли бы вы удалить или обновить этот ответ? В Swift есть намного лучший способ: http://stackoverflow.com/a/37978236/3141234 – Alexander
Я сделал это, создав категорию на NSIndexSet. Это делало это маленьким и эффективным, требуя очень небольшого кода с моей стороны.
Мой интерфейс (NSIndexSet_Arrays.h):
/**
* Provides a category of NSIndexSet that allows the conversion to and from an NSDictionary
* object.
*/
@interface NSIndexSet (Arrays)
/**
* Returns an NSArray containing the contents of the NSIndexSet in a format that can be persisted.
*/
- (NSArray*) arrayRepresentation;
/**
* Initialises self with the indexes found wtihin the specified array that has previously been
* created by the method @see arrayRepresentation.
*/
+ (NSIndexSet*) indexSetWithArrayRepresentation:(NSArray*)array;
@end
и реализация (NSIndexSet_Arrays.m):
#import "NSIndexSet_Arrays.h"
@implementation NSIndexSet (Arrays)
/**
* Returns an NSArray containing the contents of the NSIndexSet in a format that can be persisted.
*/
- (NSArray*) arrayRepresentation {
NSMutableArray *result = [NSMutableArray array];
[self enumerateRangesUsingBlock:^(NSRange range, BOOL *stop) {
[result addObject:NSStringFromRange(range)];
}];
return [NSArray arrayWithArray:result];
}
/**
* Initialises self with the indexes found wtihin the specified array that has previously been
* created by the method @see arrayRepresentation.
*/
+ (NSIndexSet*) indexSetWithArrayRepresentation:(NSArray*)array {
NSMutableIndexSet *result = [NSMutableIndexSet indexSet];
for (NSString *range in array) {
[result addIndexesInRange:NSRangeFromString(range)];
}
return result;
}
@end
Вот пример кода:
NSIndexSet *filteredObjects = [items indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {do testing here}];
NSArray *theObjects = [theItems objectsAtIndexes:filteredObjects]
Наличие Доступно в iOS 2.0 и более поздних версиях.
Почему вы хотите это сделать? – Chuck
У меня есть метод получения NSArray в качестве параметра для удаления нескольких записей, выбранных из tableview –
Это кажется немного круговым. Если цель массива состоит в том, чтобы содержать набор индексов, почему бы не использовать этот метод вместо NSIndexSet? – Chuck