Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 默认情况下,核心数据回迁(NSFetchRequest)是否以任何特定方式排序?_Cocoa_Core Data - Fatal编程技术网

Cocoa 默认情况下,核心数据回迁(NSFetchRequest)是否以任何特定方式排序?

Cocoa 默认情况下,核心数据回迁(NSFetchRequest)是否以任何特定方式排序?,cocoa,core-data,Cocoa,Core Data,我有一个基本问题。假设您有一个要在NSManagedObjectContext上执行的NSFetchRequest。如果fetch请求没有显式设置任何排序描述符,那么对象是否每次都是随机的,或者它们是否将按照最初添加到托管对象上下文的顺序吐出到数组中?我在文档中的任何地方都找不到这个答案。顺序可能不是“每次都随机”,但据我所知,您不能/不应该依赖它。如果您需要特定的订单,请使用排序描述符。不,它们不能保证被订购。您可能会碰巧看到一致的排序取决于您使用的数据存储类型(我从未尝试过),但这并不是您应

我有一个基本问题。假设您有一个要在NSManagedObjectContext上执行的NSFetchRequest。如果fetch请求没有显式设置任何排序描述符,那么对象是否每次都是随机的,或者它们是否将按照最初添加到托管对象上下文的顺序吐出到数组中?我在文档中的任何地方都找不到这个答案。

顺序可能不是“每次都随机”,但据我所知,您不能/不应该依赖它。如果您需要特定的订单,请使用排序描述符。

不,它们不能保证被订购。您可能会碰巧看到一致的排序取决于您使用的数据存储类型(我从未尝试过),但这并不是您应该以任何方式依赖的


不过,按创建日期订购很容易。只需向实体添加一个日期属性,将其初始化为
awakeFromInsert
中的当前日期,并在获取中指定排序描述符。

我在这里看到两个问题:它是否每次都以相同的顺序出现?这是插入顺序吗

它是按一定的顺序出现的,也就是按一定的顺序出现的。请注意,NSSet只是一个接口,有一些私有类实现NSSet。这意味着,如果对NSSet调用AllObject,则返回的某些NSSet实例可能会以某种一致的顺序返回它们,但它几乎肯定是以哈希顺序返回的,因为集合几乎都是作为哈希字典实现的

由于散列算法是高度可变的,取决于存储的内容和散列方式,因此您可能“幸运地发现”它每次都以相同的顺序出现,但在另一次发生非常微小的变化时,您可能会措手不及

所以,从技术上讲,它不是随机的,它可能是稳定的

对于第二个问题,我想说它几乎肯定是而不是插入顺序


Marc关于处理awakeFromInsert的建议很好,您需要什么。

订购时没有保证。例如,我可以实现一个NSAtomicStore或NSIncrementalStore,它以随机顺序返回结果,这将是完全正确的。我也看到SQLite商店在不同版本的操作系统上返回不同的顺序