- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个简单的目录管理器功能,其中包含类别中的项目,除了一个项目可以在多个类别中。
Item 有 'parents' 键,它是父类别的 NSSet
Category 有 'items' 键,它是它的子项的 NSOrderedSet
我正在使用 NSFetchedResultController
及其委托(delegate)来用项目填充我的表
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"(ANY parents == %@)", self.category];
[fetchRequest setFetchBatchSize:30];
[fetchRequest setSortDescriptors:@[????????];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
所以使用这段代码我可以获得 self.category 中的项目列表
在我的用户界面中,我具有拖放
功能。所以我可以在类别内移动项目。
我的问题:Category1 和 Category2 都包含对相同项目 Item1 和 Item2 的引用。我需要在 Category1 中订购 Item1、Item2,在 Category2 中订购 Item2、Item1。这就是为什么我将 category.items 属性设置为 NSOrderedSet
。
但我无法按 category.items 中的索引对项目进行排序
我尝试在排序描述符中使用 block - 没有用,我尝试在排序描述符中使用选择器 - 没有用,我尝试对排序描述符进行子类化 - 以某种方式工作但在我更改时不更新项目他们的索引是 category.items.
在我的 NSSortDescriptorSubclass 中像这样:
- (NSComparisonResult)compareObject:(Item*)object1 toObject:(Item*)object2 {
int index1 = [self.category.items indexOfObject:object1];
int index2 = [self.category.items indexOfObject:object2];
如果(索引 1 > 索引 2){
返回 NSOrderedDescending;
} 否则如果(索引 1 < 索引 2){
返回 NSOrderedAscending;
}
返回 NSOrderedSame;
}
但是,如果我更改 Category.items 中的顺序,我的 UI 中的项目顺序将不会更新
所以,请帮我按 category.items 集中的索引对项目进行排序。也许有一种方法可以通过一些键、运算符、表达式或其他任何东西来做到这一点。谢谢。
最佳答案
我建议您不要使用有序的对多关系。看起来它们并没有真正按预期工作并且不符合您的需求。
相反,您需要引入自己的属性来进行排序。您可以有一个实体 categoryItem
,它与 Category
和 Item
以及属性 sequence
都有一对一的关系>。
在您的 FRC 中,您获取 categoryItem
实体,并且在显示时您只需使用 categoryItem.item
来访问项目的属性。当您重新排序(例如通过拖放)时,您必须重新编号所有 categoryItem
并分配正确的序列号。
-- 编辑--
要在项目的某些细节发生变化时将 categoryItem
标记为“脏”:您可以在 categoryItem
中实现一个方法 markDirty
看起来像这样:
// CategoryItem.m
-(void)markDirty {
[self willChangeValueForKey:@"sequence"];
[self didChangeValueForKey:@"sequence"];
}
// EditItemController.m
item.attribute = newAttribute;
for (CategoryItem *i in item.categoryItems) { [i markDirty]; }
关于ios - 核心数据 : Sort items by index in category's set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15768491/
我正在尝试根据 magento 中的产品 ID 在类别路径中获取类别名称。 假设我的产品 ID = 1,并且我在其中定义了 category5 (id = 5),并且我得到了类似 2/3/5 的类别路
我试图弄清楚如何通过 AngularJS 中的 $http.get() 方法发送数组。这就是我正在做的事情: $http.get('/events.json', {params: {category_
我在产品类别和子类别网站上工作,可以创建的子类别数量是无限的,这意味着我们可以自己拥有子类别的子类别。一切正常,我只是有一个问题:假设“PRODUCT 1”属于“SUB SUB CATEGORY 1”
在 stackoverflow 上所有这些 mod 重写主题之后,我仍然没有找到我的问题的答案。我有一个顶级站点,基本上我想做的就是将 /index.php?method=in&cat=Half+Li
我正在为我的未婚夫构建一个 Rails 应用程序来进行一些非常基本的库存跟踪。我们已经经历了几种选择,因为无论如何我都想学习 Rails,所以我们想出了为什么不。无论如何,如果我可以将一些产品按这样分
我需要在 Prestashop 主题的类别页面中列出同级类别。目前它确实显示子类别(如果有)但不兄弟类别。 如果能快速回答,我们将不胜感激!谢谢。 最佳答案 首先我会在/override/contro
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 7 年前。 Improve
我正在使用以下维基媒体 API 列出具有特定类别的所有页面:https://www.mediawiki.org/wiki/API:Categorymembers 例如https://en.wikipe
我应该如何命名用户类别和文章类别的表和模型?我有两个表,一个是用户,另一个是文章。我想对它们进行分类,以便我可以仅调用新闻文章或仅使用公司类别中的用户。所以我需要这些模型/表之间的关系。 我考虑过为文
在 UI Router 中实现此类功能的最佳方法是什么? /category/product /category/category/product 例如: /telephones/apple/ipho
我有以下 SQL 架构: tbl_产品: - ID - id_category tbl_categories: - ID - id_parent tbl_products_categories:- i
我需要创建一个对用户隐藏的应用程序。但在它被隐藏之前,我需要在 GUI 上设置一些配置,然后我必须从应用程序列表中隐藏图标。如果我删除 应用程序未显示在应用程序列表中。但是我的配置 GUI 也没有显
我正在尝试派生一个 MySQL 查询来转换这个: product | sold milk | 6 milk | 4 bread | 3 bread | 2 bread
我正在使用 ^category/|categories/$。 为什么 ^categor[y|ies]/$ 不起作用? 最佳答案 你的正则表达式应该是, ^categor(?:y|ies)/$ 使用非捕
据我所知,有两种情况会导致以下错误: ld: warning: instance method 'resetAudioSystem' in category from /opentok-ios-sdk
我希望我的问题很清楚,但我会尝试再解释一下。 在我的数据库中,我有两列名为“category”和“images”。在我的表单中,人们需要添加一个类别,以便我的 PHP 向 MySQL 添加一个新条目。
我在 pandas 中有以下 df 数据框: weekday venta_total_cy 0 Viernes 5.430211e+09 1 Lunes 3.4255
我目前陷入困境。场景是这样的。我有可能与多个类别相关联的产品。数据结构如下图: Products Table: product_id name 1 Lemon 2
我使用 openActivity()使用 Kotlin 在 Android Studio 3.1.2 中创建首选项 UI。 看来代码A和代码B都可以正常工作。 android.intent.categ
我有一个 Postgres 数据库。我正在尝试根据表 2 中表达的条件删除表 1 中的行。 表 1:id, object_id, time, action_type 表 2:object_id, ob
我是一名优秀的程序员,十分优秀!