NSMutableOrderedSet 转为 NSMutableArray

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

这对于一个 NSSet 起作用了,但是我该如何让它与一个 NSMutableOrderedSet 起作用呢?

1个回答

34

NSOrderedSet类有一个方法可以获取数组 [orderedSet array]。然后可以使用 [array mutableCopy] 来获取可变数组。

或者,如果你愿意的话,可以使用 [NSMutableArray arrayWithArray:[set array]];

但请注意:

这会返回一个代理对象,作为接收有序集合的不可变数组。 虽然您无法通过此代理对有序集进行更改,但对原始有序集的修改将反映在代理中,并且它将出现自动更改,因为不会复制有序集的副本。

基本上,如果不想出现这种情况,必须复制该数组。


我之前尝试过 [NSMutableArray arrayWithArray:[set array]]; 但是它给了我一个 -[__NSSetM array]: 无法识别的选择器错误消息。不确定为什么。 - Landon
1
这是因为__NSSetM是NSMutableSet,而不是NSMutableOrderedSet。你可能会误以为NSMutableOrderedSet是从NSSet派生出来的,但实际上并不是。无论如何,这是从NSMutableOrderedSet获取NSMutableArray的正确答案,就像所要求的那样。那么你需要NSMutableSet还是NSMutableOrderedSet的答案呢? - Brad Allred
谢谢。刚刚意识到我将其分配为NSMutableSet而不是NSMutableOrderedSet。 - Landon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接