Подтвердить что ты не робот

Будет ли [NSSet allObjects] возвращать массив с одинаковым порядком каждый раз?

У меня есть список пользовательских объектов, возвращаемых из .NET WebService, и я храню их, используя отношения To-Many из родительской enitity с Core Data.

Я хочу использовать NSSet в качестве источника данных для UITableView и нажимать новый контроллер в стек при выборе строки.

При использовании [NSSet allObjects] возвращаемый массив всегда имеет один и тот же порядок? (Я думаю, не так, как наборы неупорядочены)

Если нет, как тогда я могу использовать NSArray *myArray = [mySet allObjects]; в cellForRowAtIndexPath, чтобы получить имя для textLabel ячейки, а затем снова в didSelectRowAtIndexPath, чтобы назначить объект ViewController, который должен быть нажат?

У меня уже есть родительский объект, синтезированный в моем UITableViewDelegate. Я также подумал о том, чтобы синтезировать NSArray и использовать allObjects только один раз в viewDidLoad для создания, но это дублирование данных в памяти

4b9b3361

Ответ 1

Ваше решение, извлекая NSArray один раз во время viewDidLoad, является правильным. На самом деле вы не будете дублировать много памяти. Ваши объекты по-прежнему будут только в памяти; это просто, что ваши NSSet и NSArray будут содержать указатели на эти объекты.

Ответ 2

Там нет гарантии, что они будут в том же порядке, так как NSSet не поддерживает (технически) порядок. Если так получилось, что объекты возвращаются в том же порядке каждый раз, то имейте в виду, что эта деталь реализации не документирована и потенциально может быть изменена в будущей версии фреймворков.

Чтобы процитировать документацию:

(-[NSSet allObjects] возвращает) [a] n массив, содержащий элементы sets, или пустой массив, если в наборе нет элементов. Порядок объектов в массиве не определен.

(выделено курсивом)

Ответ 3

Используйте NSOrderedSet вместо NSSet.