Проблема с получением индекса выбранной строки в NSTableView с предикатом фильтра

Я не уверен, что правильно формулирую это, но в основном я делаю это в своем основном делегате приложения:

Приложение *app = [[Распределение приложения] initWithApplication:fullPath]

Класс Application имеет метод initWithApplication, который принимает путь к приложению, а затем устанавливает свойства для appPath, имени и т. д. Затем я добавляю новый объект «приложение» в приложения NSMutableArray:

if (app) [applications addObject: app];

Массив содержимого NSArrayController привязывается к приложениям NSMutableArray, а затем различные ключи (appPath, имя и т. д.) устанавливаются в NSArrayController. Затем у меня есть табличное представление с различными столбцами, привязанными к разным свойствам, например. один столбец для имени, один столбец для пути и т. д.

Затем у меня есть кнопка запуска, которая запускает приложение, выбранное в табличном представлении. Для этого я использую этот код:

Application *app = [applications objectAtIndex:[tableView selectedRow]];

Затем я просто использую «app.appPath» в качестве ссылки на путь к текущему выбранному элементу. Это прекрасно работает. Проблема возникает, когда содержимое табличного представления фильтруется с помощью filterPredicate. По сути, он отфильтровывает все приложения в представлении таблицы и оставляет только те, имя которых содержит фразу, введенную в поле поиска.

Вышеупомянутый метод не работает, потому что он получает индекс элемента в табличном представлении, а поскольку все элементы не находятся в табличном представлении, счет сбивается. Например, у меня есть приложение под названием MyApp.app, которое является элементом с индексом 25 в массиве приложений.

Приведенный выше код работает хорошо, потому что tableView и массив приложений имеют одинаковое количество объектов. Однако фильтрация содержимого табличного представления создает разницу в количестве объектов и, следовательно, запускает неправильное приложение.

Я надеюсь, что мое объяснение не слишком запутанно, но его трудно объяснить. Как-нибудь обойти это?

Спасибо


person indragie    schedule 26.09.2009    source источник


Ответы (1)


Решение было довольно простым для всех, кто хочет знать:

[[Выбор контроллера массива] valueForKey:@"appPath"]

ХТН

person indragie    schedule 26.09.2009