gpt4 book ai didi

cocoa - NSCollectionView 中项目的索引

转载 作者:行者123 更新时间:2023-12-03 17:17:20 26 4
gpt4 key购买 nike

在我的 Collection View 中,我需要为每个项目生成一个索引。当项目重新排序时,我需要此索引更新其新位置。

数据是托管 NSArrayController 中的核心数据实体。我最接近的可能解决方案是在实体类上实现此方法,然后使用 representedObject.dynamicIndex 将其绑定(bind)到 UI。

- (NSNumber *) dynamicIndex
{
NSInteger r = [[[[self managedObjectContext] registeredObjects] allObjects] indexOfObject:self];
NSNumber *result = [NSNumber numberWithInt:r];
return result;
}

这个解决方案充其量只是粗略的,并且没有真正的功能,因为它不一定反射(reflect) Collection View 中的顺序。

有人有在 NSCollectionView 中生成或检索项目索引的模型/机制吗?

最佳答案

首先,请确保您理解“实体”和“实例”之间的区别(并正确使用术语)。这对于与他人交流您的问题/解决方案非常重要。

第二:不要担心 NSCollectionViewItems ...担心每个“表示的对象”,它保存在某个容器中。

第三:您是否希望显示顺序成为实体的持久属性,或者您只需要知道该项目目前所处的位置,无论它稍后可能是什么?重要问题。

第四:Core Data 没有给你有序集合的概念。这是为了支持诸如 NSSQLiteStoreType 之类的存储类型,您可能只想在几个项目(或一个)中出现错误,而不加载整个列表。因此,如果您想要持久的排序顺序,您就得靠自己了。为此,只需向您的实体添加一个名为“sortOrder”的属性并将其设置为数字类型。

第五:由于上面的“无有序集合”问题,您尝试从一个由集合构建的数组中查找给定实体实例的索引,该数组因不确定的顺序而出错,注定会失败.

第六:由于您使用的是数组 Controller ,因此您需要设置其排序描述符。您需要使用“sortOrder”键。这样,您获取的实例将始终按其“sortOrder”排序。

第七也是最后:如果您尝试获取数组 Controller 对象集/数组中任何对象的索引,您将需要向它询问其 -arrangedObjects,因此您正在获取数组 Controller 控制的已排序集合中对象的索引。

希望有帮助。

Lion (10.7) 更新

关于我的第六点:如果您的应用程序的目标版本是 10.7 及更高版本,[NSManagedObject 现在为您提供有序关系。][1] 使用 -mutableOrderedSetValueForKey: 和 -mutableOrderedSetValueForKey: 来设置和检索 NSOrderedSets。耶!

关于cocoa - NSCollectionView 中项目的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3238587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com