NSMutableOrderedSet в NSMutableArray

array = [NSMutableArray arrayWithArray:[set allObjects]];

Это работало с NSSet, но как заставить его работать с NSMutableOrderedSet?


person Landon    schedule 22.10.2013    source источник


Ответы (1)


в классе NSOrderedSet есть метод для получения массива [orderedSet array]. затем вы можете сделать [array mutableCopy], чтобы получить изменяемый массив.

или используйте [NSMutableArray arrayWithArray:[set array]];, если хотите.

знайте об этом, однако:

Это возвращает прокси-объект для принимающего упорядоченного набора, который действует как неизменяемый массив. Хотя вы не можете изменить упорядоченный набор с помощью этого прокси, мутации исходного упорядоченного набора будут отражены в прокси, и будет казаться, что он изменяется спонтанно, поскольку копия упорядоченного набора не создается.

в основном вы должны копировать массив, если вы не хотите такого поведения.

person Brad Allred    schedule 22.10.2013
comment
Я пробовал [NSMutableArray arrayWithArray: [установить массив]]; раньше, и это давало мне -[__NSSetM array]: сообщение об ошибке непризнанного селектора. Не уверен, почему - person Landon; 22.10.2013
comment
это потому, что __NSSetM является NSMutableSet, а не NSMutableOrderedSet. вы можете быть сбиты с толку, думая, что NSMutableOrderedSet происходит от NSSet, но это не так. В любом случае, это правильный ответ для получения NSMutableArray из NSMutableOrderedSet, как было задано. Итак, для чего вам нужен ответ, NSMutableSet или NSMutableOrderedSet? - person Brad Allred; 22.10.2013
comment
Спасибо. Только что понял, что выделяю его как NSMutableSet, а не как NSMutableOrderedSet. - person Landon; 22.10.2013