问题标签 [nsmutableset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1527 浏览

ios - 如何在 Swift 中将 NSSet 转换为 NSMutableSet

我在我的应用程序中使用 Core Data,并且正在处理两个实体之间的多对多关系。我的目标是让用户通过使用 tableview 并让用户选择单元格来选择一个实体中的哪个实体将与另一个实体相关。

创建实体的类时,“列表”设置为 NSSet 类型,这是有道理的,因为不需要对其进行排序,而且我不希望其中的任何其他实体超过一个。

当我想将项目添加到 NSSet 时,我的问题就出现了,据我所知,如果不使用 NSMutableSet,我就无法做到这一点。然后我获得addObjectremoveObject。除了我初始化 NSMutableSet 以拥有“列表”NSSet 当前拥有的所有内容的部分之外,我可以让一切正常工作。我尝试过的一切要么告诉我它总是会失败并且不会构建,要么最终会意外返回 nil 并出现错误。

那么有没有办法正确更改 NSSet 的内容,或者至少将 NSSet 转换为 NSMutableSet,然后当我完成后,将该 NSMutableSet 转换回 NSSet?

如有必要,我可以添加一些代码,但我认为我解释得很好。让我知道,我会添加你需要的任何细节。

先感谢您。

0 投票
2 回答
134 浏览

objective-c - *[NSMutableSet addObject: X]* 添加对象 X,即使 *[Y isEqual:X]* 为已经在 Set 中的对象 Y 返回 TRUE

我有一个名为 Objective-C 的类FactorHelper,其定义如下。它有一个称为因子的属性,它是 的NSMutableArray一个NSNumbers。我isEqual:在这个类中有一个自定义方法,如果两个FactorHelper对象中的因子属性具有相同的数字(即使数字的顺序不同),它返回 true。

我试图通过创建两个FactorHelper对象来进行测试,一个是 10,5,2另一个是 10,2,5。然后我创建了一个NSMutableSet,添加了 firstObject,然后添加了第二个对象。我期待第二个对象不会被添加,但我看到它被添加了。当我单步执行代码时,我发现isEqualaddObject 正在调用它并返回TRUE. 我究竟做错了什么?

更新

更改[NSMutableSet new]to[NSMutableSet alloc] init]使事情按预期工作。

此外,更改所有 TRUE、FALSE 为 isEqual 为 YES、NO 使其行为正确(即使我将其保留为[NSMutableSet new])。

我不知道发生了什么。有人可以阐明一下吗?

类定义

单元测试代码

0 投票
1 回答
271 浏览

ios - 将 NSMutableSet 和 NSMutableOrderedSet 桥接在一起的协议

Swift 3中,我希望能够创建一个协议,允许我添加元素并通过 using 进行迭代for element in。该协议应该同时适用于NSMutableSetNSMutableOrderedSet(因为它们不是从同一个类继承的)。

我知道有充分的理由为什么NSMutableSetNSMutableOrderedSet从同一个类继承,这里这里都有解释。

但我想创建一个协议,它只使用NSMutableSet(and NSMutableOrderedSet) 中所有方法的一小部分。

我已经add开始工作了,像这样:

但是,我真的很想能够通过使用来遍历元素:

我试图使protocol MutableSet符合Sequence协议,像这样,但它不起作用:

是否可以使我的协议符合Sequence?我该怎么做?我尝试了typealias和等associatedtype的各种组合。我也尝试了这个答案,它对我不起作用。ElementIterator

编辑 2:在编辑 1 中回答我自己的问题

我开始var count: Int { get }使用这个解决方案,但不确定它是否是最好的......如果不必在 and 的扩展中实现 也很好,var elements: [Any] { get }但我想这是不可避免的吗?NSMutableSetNSMutableOrderedSet

编辑1:跟进问题 使用@rob-napier 的优秀答案和type erasure技术我已经扩展了protocol MutableSet具有count和能力的能力,但是我只能使用丑陋的(named )subscript来做到这一点,而不是. 这就是我正在使用的:funcgetCountvar

我怎样才能让它在协议中使用,var count: Int { get }var elements: [Any]不是在函数中使用?

0 投票
2 回答
1275 浏览

objective-c - 将 NSMutableSet 转换为 NSSet

有没有办法将 NSMutableSet 转换为 NSSet?我尝试了几种方法:移动到 NSArray 和 setWithArray;用 NSMutableSet 的内容实例化一个 NSSet。程序编译,但我得到一个运行时错误。

0 投票
0 回答
194 浏览

ios - NSMutableSet 中自定义对象的相等性

我在向我自己的对象之一添加自定义相等检查时遇到了一些困难。

我有一个自定义Message对象,它有一个独特的messageID属性,它是一个NSString,以及关于消息的其他信息。

对象存储在 中NSMutableSet,因此集合中需要唯一性,但我需要它们基于 而messageID不是默认值是唯一的。

为此,我添加了以下代码。

但是,当我开始将对象的实例添加Message到集合中时,应用程序(有时,并非总是)在以下行之一崩溃:

或者

基本上每当它尝试访问该messageID属性时。

我得到的错误是EXC_BAD_ACCESS.

任何指向正确方向的指针将不胜感激!

0 投票
1 回答
68 浏览

ios - How to remove applied filter on a NSMutableSet

I have two entities Student and Subjects. Student can have multiple subjects. I am getting NSMutableSet object from Student (NSManagedObject)

Now I want to check if a subject is already belongs to that student. For this I am applying filter on NSMutableSet like this

Now I am checking if count is > 0 then do some action else want to assign the subject to the student

The problem is It is always inserting new records instead of saving existing records.

0 投票
1 回答
252 浏览

swift - Swift 3.0 中 NSMutableSet 的 componentsByString

我有标签和 NSMutable 集。

我想将我的设定值分配给 label.text。

mutSet.allObjects.componetsJoinedByString("\n") 抛出编译时错误,我尝试过加入,它也抛出编译时错误。

请在 Swift 中为我提供替代方式

0 投票
1 回答
493 浏览

objective-c - 如何在Objective C中为多个集合执行联合集

我有一组NSSet实例,如下面的代码中所述。

NSSet通过使用[NSSet setWithArray:]从数组创建集合的方法,在 N 个实例中定义了这所有 N 个数组。所有 N 个集合实例都存储在一个数组 X 中。现在,我需要对所有 N 个集合执行联合集合操作。我怎么能做到这一点?

0 投票
1 回答
2514 浏览

swift - 将 NSMutableSet 存储到 NSUserDefaults

我想在 NSUserDefaults 中存储一个 Swift Set。

鉴于我可以使用以下方法从 UserDefaults 读取 NSMutableSet 值:

...似乎我也应该能够编写 NSMutableSet 。

我尝试将我的 Set 转换为 NSMutableSet,但是当我尝试将其保存在 UserDefaults 中时,它说:

[用户默认值] 尝试将非属性列表对象 {( foo )} 设置为键 KEYNAME 的 NSUserDefaults/CFPreferences 值

0 投票
2 回答
168 浏览

ios - 从 NSObject 类创建一个数组

我有一个包含 3 个属性的 NSObject 类调用 Details。

这个类的执行是

在另一个类调用请求类中,我想创建一个数组来保存详细信息类的属性(图像、数字、详细信息)

但我不能将这个类的属性作为一个数组......我在这里错过了什么?任何帮助都是完美的!谢谢