问题标签 [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.
objective-c - 如何在 NSMutableSets 中引用对象
我有一个小型 C# 库,我正在尝试将其移植(实际上是使用它作为指南重写 C# 代码)到 Obj-C。该库的目的是为 iOS 日历应用程序生成定期约会。我在将 C# 结构移植到 Obj-C 对象时遇到问题。这是我对保存约会信息的结构之一所拥有的:
我编写的其中一个方法接受一个日期、一组时间表(也是 C# 的一个端口struct
)和约会列表(我使用的NSMutableSet
是包含上述 Appointment 接口的)。如果我可以让约会方法起作用,我很确定我可以找出其余的(我认为)。这是将约会添加到的代码NSMutableSet
:
我在if
声明中遇到构建错误:
将“void”发送到不兼容类型“Schedule *”的参数
我以前从未使用NSMutableSets
过,也没有尝试过从 C# 移植。如您所见,我正在使用 C# 结构的端口。我已经阅读了所有关于集合的 Apple 文档,以及一些解释 C# 和 Obj-C 之间差异的文档。
有人可以解释我做错了什么,或者指出一些好的文档可以给我一个在集合中引用元素的例子吗?
objective-c - 如何访问使用 NSMutableSet 创建的 NSArray 中的字段?
我有一个名为Schedule的类,其中包含 4 个属性:
我有另一个类,我之前在其中创建了两个带有数据的“Schedule”对象(用于测试),并将它们都放在 NSMutableSet 中。这是代码:
现在,我有另一个课程,我尝试将 NSMutableSet 中的时间表放入 NSArray 中,以便我可以使用它们,如下所示:
问题是我似乎无法访问scheduleList中的字段,例如apptStartTime,所以我可以使用它(与另一个日期比较等)。
有没有更好的方法来做到这一点,而不是将 NSMutableSet 放在 NSArray 中?以及如何访问 NSArray 中的各个字段?
ios - 无法使用 ReactiveCocoa 观察 NSMutableSet 添加
我有一个带有 NSMutableSet 属性的简单视图控制器,名为selectedEmails
. 在viewDidLoad
我创建空集并订阅更改:
出于调试目的,我随后将一个项目添加到viewDidAppear:
. 但是,订阅块只会触发一次,对于初始的空集,而不会触发新的更新集。
为什么是这样?如何修复它以便观察变化?我在另一个问题的答案中看到,您不能观察集合,而只能观察包含它的类——这是否意味着 ReactiveCocoa 不能在集合上工作?
objective-c - NSMutableSet 线程上的 -allObjects 是否安全?
NSSet objectEnumeration 上的文档说:
当此方法与 NSSet 的可变子类一起使用时,您的代码不应在枚举期间修改集合。如果您打算修改集合,请使用 allObjects 方法创建集合成员的“快照”。枚举快照,但对原始集进行修改。
现在我的问题是:allObjects 方法本身是线程安全的吗?
我已经实现了一个这样的操作集:
这一切都很好。但是我通过 Crashlytics 发生了崩溃,这种情况很少见(数百分之二),但在那里:
从多个线程访问 OperationSet。
任何帮助是极大的赞赏。
编辑
感谢 dasblinkenlight 启发了 allObjects 的使用。我已经像这样编辑了我的实现:
代码有效!这是一个好兆头,但你能复习一下吗?
还有另一个问题:使用 allObjects 与制作集合副本有什么区别吗?
那就是使用这段代码:
在这段代码上:
谢谢你的帮助。
objective-c - NSMutableSet 设置减组不工作
我一定错过了一些基本的东西——希望有人能向我指出。
我有两个 NSSet。集合 A 包含 40 个 NSNumber 值,集合 B 包含 20 个 NSNumber 值。集合 A 包含集合 B 的所有 20 个值以及集合不共享的 20 个其他值。
我想做的是:NSSet *newSet = Set A - Set B,其中新集合仅包含集合 A 中未包含在集合 B 中的 20 个值。虽然我使用的是“minusSet”,但我的新集合始终包含所有 40 个原始值。我已经记录了每组 A 和 B 的内容,以确保它们包含我上面描述的内容。
这是我的代码:
1) 创建集合 A(包含 40 个 NSNumber)
2) 创建集合 B(包含 20 个 NSNumber,它们也在集合 A 中)
3) 尝试从集合 A 中减去集合 B:
4) 将所有剩余对象添加到新数组中:
但是,threadIdsForMessageFetch 包含 40 个对象而不是 20 个。当我打印每个集合时,我得到:
A组
B组
新数组:
减集调用前 A 和 B 的计数如下:
ios - NSMutableSet removeObject 未按预期工作
我正在使用一个NSMutableSet
包含可变对象的对象。我NSMutableSet
在尝试删除已变异的对象时发现不一致。
为了隔离问题,我编写了一个快速测试来说明问题(如果有的话):
示例 1:按预期工作
示例 2:未按预期工作
如示例 2所示,在 mutating 之后,即使在通过搜索获取引用之后surname1
,removeObject
也不会将其删除。为什么会这样?可变容器不能包含可变对象吗?
我在这篇文章中读过NSSet
缓存包含对象的哈希值,这可能是问题所在。如果是这样,有没有办法清理它?任何替代解决方案?
只是出于好奇,为什么示例 1有效?
更新:
如果可变对象存储在集合中,则对象的哈希方法不应该依赖于可变对象的内部状态,或者当可变对象在集合中时不应该修改它们。例如,一个可变字典可以放在一个集合中,但是当它在那里时你不能改变它。(请注意,很难知道给定对象是否在集合中)。
更新 2:
重要的是,如果您在 Mac 或 iOS 应用程序上运行,示例 2将返回不同的日志输出:
登录 Mac 应用程序(按预期工作):
登录一个 iOS 应用程序(没有像我预期的那样工作):
更新 3:
与示例 2中的代码相同,但NSMutableArray
似乎可以工作......所以猜测如何NSMutableSet
使用哈希。我相信正如上面链接线程中所评论的那样,它正在缓存它们:
macos - 如何禁用排序 - NSMutableSet 中的所有对象?
在我的 OSX 应用程序中,我有包含自定义对象的 NSMutableSet。我在我的自定义对象类中实现了 -isEqual 和 -hash 方法,以便集合可以按照我想要的方式进行比较。
但是,每当我将一个新对象插入我的集合然后调用 -allObjects 时,返回的数组中的对象都是按排序顺序排列的。
顺序取决于我在上面提到的 -isEqual 方法中用于比较我的自定义对象的属性的值。
就我而言,我想保留将对象添加到集合中的顺序。
有谁知道如何实现这一目标?
任何形式的帮助都非常感谢!
xcode - 无法清除/重置 NSMutableSet?
这就是我想要做的。每次我的 viewDidLoad 启动时获取 7 个随机的、非重复的数字。我得到它来创建随机数,但我一直试图在加载 NSMutableSet 以获取新集合时清除它,但我遇到了麻烦。NSLog 清楚地显示 NSMutableSet 中没有任何内容,但它总是以相同的顺序出现相同的数字?
ios - 保留我新创建的 NSSet
我有 2 个按钮:button1 和 button2。我想为每个触摸的相应按钮创建一个 NSSet,并希望在触摸按钮 2 时显示 set1 值,反之亦然。按下按钮 1 时仅打印设置 1,按下按钮 2 时仅打印设置 2。如何保留在 button1 操作中创建的集合,以便在按下按钮 2 时显示/使用它。看看我的简单代码
在实施中,我有:
ios - isEqualToSet 没有返回正确的值
我有两个NSArray
包含整数值。我想从两个数组中获取公共值,为此我正在使用NSMutableSet
.
这是我的代码
`
`
这是数组 `array1 ( 2, 3 ) 中的值
array2 ( 2, 3 )
and values in
NSMutableSet` 是
` set1 {( 2, 3 )}
设置2 {( 2, 3 )} `
根据条件和值,代码不会执行if()
条件内的行。但是这里的if()
条件返回错误的值。
也[set2 intersectSet:set1];
返回set2
为空。
这段代码有什么问题。
请帮我解决这个问题。