Как отобразить NSSet в UITableView?

Как бы вы продолжили отображать содержимое NSSet в UITableView?

Как вы знаете, табличное представление запросит элемент в данной строке, но поскольку элементы NSSet не упорядочены, это не очень хорошо сочетается.

Мое текущее решение состоит в том, чтобы перебирать NSSet, пока я не достигну элемента с заданным индексом, но это действительно не кажется правильным.

Вы можете спросить, почему я вместо этого не использую NSArray. Это потому, что я использую Core Data, который использует NSSets для хранения набора элементов.

Любая помощь будет оценена по достоинству.


person Martin Cote    schedule 17.09.2009    source источник


Ответы (1)


Поскольку вы только отображаете элементы, почему бы не взять NSSet и не вызвать для него -[allObjects], чтобы получить NSArray?

Если ваши данные изменятся, вам все равно придется выполнять повторную выборку, даже с NSSet, и, кроме первоначального преобразования из NSSet, использование массива происходит довольно быстро.

person mrueg    schedule 17.09.2009
comment
Итак, можем ли мы с уверенностью предположить, что 2 последовательных вызова allObjects возвращают элементы в том же порядке (когда NSSet не был изменен)? Поскольку в документации говорится только о том, что порядок не определен, в нем не упоминается, что порядок является стабильным. И если он стабилен сейчас, вы уверены, что он останется стабильным в будущих версиях iOS? Я не очень уверен в том, чтобы полагаться на эту функцию для получения элементов, которые я могу отобразить в табличном представлении. - person Christophe Fondacci; 29.07.2013
comment
@ChristopheFondacci просто вызовите allObjects один раз и сохраните результат в переменной до тех пор, пока VC не будет закрыт или пока набор не будет изменен снова. - person Victor Jalencas; 12.07.2016
comment
@VictorJalencas да, я знаю, как это сделать, это не мой вопрос. Мой вопрос касается реализации allObjects. - person Christophe Fondacci; 13.07.2016
comment
@ChristopheFondacci, вероятно, не стоит вызывать allObjects дважды, ожидая получить тот же результат. Даже если для некоторых наборов это работает, результат кластера классов может зависеть от количества объектов. Отсюда мой совет вызывать его только один раз и сохранять результат вместо того, чтобы каждый раз вызывать allObjects, если вам нужна повторяемость. Даже если он вам не нужен, перебор одного и того же массива будет быстрее, чем получение нового. - person Victor Jalencas; 15.07.2016