问题标签 [nsorderedset]
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 - 集合中的数组:为什么 NSSet 使用 allObjects,而 NSOrderedSet 使用数组?
在 Foundation 中,如果我想将一个集合转换为一个NSArray
,我可以使用:
-[NSSet allObjects]
-[NSOrderedSet array]
为什么这些不同?
core-data - 自定义 NSManagedObject 类以从 NSOrderedSet 添加/删除对象
我正在学习 Cocoa 并遵循 Aaron Hillegass 的书(第 32 章核心数据关系)中的一个示例,但无法让它为我自己的应用程序工作。
我有一个核心数据模型,它由一个与子对象有一对多关系的父对象组成,但我的是一个有序集合,这与书中的基本 NSMutableSet 不同。
每个对象(父对象和子对象)都有关联的 NSArrayControllers,我在 Interface Builder 中开发了一个基于文档的应用程序,其中包含按钮和绑定,用于从选定的父对象(称为层)。这一切都在工作。
现在我想拦截 add 和 remove 方法,以便在添加或删除孩子时我可以自己编写代码。
在 Hillegass 的书中,他通过创建 NSManagedObjects 子类然后在代码中实现 addEmployeesObject: 和 removeEmployeesObject: 方法来做到这一点。所以这就是我尝试的。
这是我由 XCode 编辑器创建的子类:
这是我根据教科书在 Layer.m 中实现的两种方法:
我把 NSLogs 放进去,所以我确定它们不会被调用——当我添加/删除感知器对象时,控制台中什么也没有。
ArrayController 在收到 add: remove: 消息时会做什么?是否将 addObject/removeObject 消息直接发送到集合?为什么在教科书示例中它会向父对象发送消息以删除子对象?为什么这里没有发生?有没有办法调试并找出答案?
谢谢
cocoa - 通过 NSOrderedSet 对 NSArray 进行排序
我正在NSFetchRequest
使用以下谓词:
...indexes
一个NSOrderedSet
数字在哪里。
这给了我一组具有给定索引的“随机排序”对象。我需要对此进行排序,以便对象以与有序集中相同的顺序出现。
最有效的方法是什么?
更新
这是基于 Martin R 回答的类别:
ios - 在 UITableView 中对核心数据多对关系进行排序
我在这里看到了很多关于这个问题的帖子,但似乎没有一个能解决我遇到的问题。
我有一个使用核心数据的应用程序。我正在尝试对连接到 NSFetchedResultsController 的 tableView 进行排序,使问题比这里的其他一些帖子更复杂的是我需要根据用户位置更新排序。
我的情况如下:
我有一个名为 Store 的实体。商店有很多分店,每个分店都有自己的纬度/经度。我有一个表格视图,显示所选商店的所有分支机构。我想要的是,当用户在 tableview 可见的情况下更新他们的位置时,单元格会更新他们的位置,以便 tableview 以最近的分支在顶部进行排序。
当用户靠近分支等时,我设法使所有这些都正常工作,单元格动画上下移动。但是,我的解决方案不仅效率低下,而且当 tableview 有更多单元格时,它还有一个重大错误可以适合屏幕。
我知道最有可能失败的路线是使用 NSOrderedSet 对我的 Store 实体上的多对多关系进行排序。但不确定如何实现这一点,因为我正在排序的值不存储在核心数据中,而是在有意义的情况下动态计算。lat 和 long 被存储,但距离是动态计算的,它的距离值决定了排序。
目前我使用 CLLocationManger 协议 locactionManager:didUpdateLocations 来调用我的排序方法 updateCellSortingOrder。位置管理器设置为:
我的排序方法有效,但就像我说的那样并不理想。我希望能够利用尽可能多的核心数据工具,例如 NSFetchedViewController、谓词、聚合等,而不是创建数组、对它们进行排序然后将它们推回 FRC 等,这有点像我现在正在做的......太乱了。
这是我的代码,注意:branchCell是 UITableViewCell 的子类,它有一个包含分支的属性 init。分支是我的实体分支的一个实例
}
objective-c - -[NSOrderedSet indexOfObjectsPassingTest:] 真的返回 NSIndexSet 或 NSNotFound 吗?
我有这个代码:
这会导致 Xcode 发出警告,指出“指针和整数之间的比较('NSIndexSet *' 和 'int')”。我完全同意 Xcode 在这一点上的看法。
但是,该函数的返回值是类型NSIndexSet*
和 Apple 文档(http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSOrderedSet_Class/Reference/Reference.html)指出:
返回值
通过谓词指定的测试的有序集中对应值的索引。如果有序集中没有对象通过测试,则返回 NSNotFound.."
那么当函数的返回类型是指向的指针时,返回NSNotFound
(这是一个)有什么意义呢?通过将比较更改为以下内容来抑制警告是否安全:NSInteger
NSIndexSet
因为,理论上,索引可能是一个有效的返回NSIndexSet
指针,它恰好指向一个等于 的内存地址NSNotFound
,对吗?
iphone - 如何使用 NSOrderedSet 的顺序对 NSFetchedResultsController 的结果进行排序
NSOrderedSets 保存表中对象的顺序。如果您使用 NSOrderedSet 属性访问 NSManagedObject 子类实例,那么它们将按顺序排列。
但是,在创建 NSFetchRequest 时,似乎无法使用 NSSortDescriptor 访问该订单。
从原始 SQLite DB 中可以看出,该订单存储在名为Z_FOK_<relationship name>
. 数据可用,但通过核心数据 API 似乎不可见。
有谁知道编写 NSSortDescriptor 的方法,该方法将与 SQLite DB 一起使用,以按 NSOrderedSet 指定的顺序返回结果?
更新
ios - NSManagedObject 无法识别的选择器发送到实例
我有一个如下的核心数据模型,其中孩子是一对多的关系。
。H
.m
然后我尝试使用以下方法设置它:
然而在最后一行,我得到了这个错误:
NSCFConstantString managedObjectContext]:无法识别的选择器发送到实例 0xe8fa0'
如果我更改NSOrderedSet
为NSSet
编译器抱怨它需要一个NSOrderedSet
.
如何将集合分配给NSManagedObject
?
ios - CoreFoundation 陷阱错误“Thread1:EXC_BREAKPOINT (code=EXC_ARM_BREAKPOINT, subcode=0xdefe)”
我需要你的帮助我遇到了这个令人沮丧的“随机”错误。
该应用程序由一个Mapviewcontroller
和一个collectionview
由第二个控制器上
有时,当我从第二个控制器返回地图时,应用程序突然崩溃,并在“陷阱”行出现此错误。崩溃报告没有指向我的任何代码行。
EXC_BREAKPOINT(代码=EXC_ARM_BREAKPOINT,子代码=0xdefe)
我说“随机错误”是因为同一应用程序的相同版本可以构建并顺利运行数天,然后突然卡住。重新获得应用程序控制权的唯一方法是从 iPad 中手动删除并重建。
供您参考,该应用程序使用 Coredata。
有任何想法吗?一些方法来找出错误来自哪里?
任何帮助表示赞赏,谢谢!
ios - NSOrderedSet 与 NSArray indexOfObjectPassingTest:
NSOrderedSet类参考概述说:
当元素的顺序很重要并且测试对象是否包含在集合中的性能是一个考虑因素时,您可以使用有序集合作为数组的替代方案——测试数组的成员资格比测试集合的成员资格慢。
哪些方法被认为是“成员资格测试”?只是containsObject:
?或者,也会indexOfObjectPassingTest:
更快?
我问是因为如果我只有对象的 ID(例如来自服务器)并且想要检查有序集是否包含具有该 ID 的对象,我会使用indexOfObjectPassingTest:
. 但是,由于它测试集合中的每个对象,该方法似乎与数组一样慢。另一方面,containsObject:
似乎它会更快,因为它利用了NSObject
方法hash
& isEqual:
。我可以使用我拥有的 ID 创建一个探测对象,然后使用containsObject:
. 但是,如果有序集中已经包含具有该 ID 的对象,我将丢弃探测对象并更新已在有序集中的对象的属性。首先必须创建一个探测对象似乎是额外的工作。在这种情况下,是否值得在数组上使用有序集?
另外,我会按对象的日期而不是 ID 对对象进行排序。
正如St3fan 所建议的那样,我会使用NSMutableDictionary
带有对象 ID 的对象映射到对象,但我也想在.UITableView
ios - 如何将唯一对象添加到 nsmutablearray?
我有一个里面有 NSStrings 的 NSObject。如何将具有唯一 obj.name 的对象仅添加到 NSMutableArray?我试过 NSOrderedSet 但它只有在你将 NSString 添加到数组而不是里面有 NSString 的对象时才有效。
例子。
如何确保没有两个 MyObject 具有相同的名称?