Будет ли [NSSet allObjects] каждый раз возвращать массив с одинаковым порядком? - PullRequest
18 голосов
/ 04 октября 2010

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

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

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

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

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

Ответы [ 3 ]

33 голосов
/ 04 октября 2010

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

Цитировать документацию :

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

(выделение добавлено)

8 голосов
/ 04 октября 2010

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

3 голосов
/ 08 июня 2015

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

...