【发布时间】:2013-11-22 12:07:18
【问题描述】:
我正在显示活动列表中的几个任务。为此,我使用 NSPredicate predicateWithFormat: 来选择列表中的项目。但我遇到的问题是关于该列表中先前删除的任务。即使它们没有显示(或者我应该说显示为无效),它们仍然被计算在内。
所以我的问题是:我怎样才能只选择仍然是列表一部分的项目(任务)?删除的数据应该被忽略。它们实际上应该被完全删除。
我的部分代码(我刚刚根据 Martin 的评论更新了它):
- (void)continueAutomaticModeWithList:(DIDList *)list taskIndex:(NSInteger)index {
if (index == list.tasks.count) return;
DIDTask *task = [DIDTask MR_findFirstWithPredicate:[NSPredicate predicateWithFormat:@"list == %@ && index == %@", list, @(index)]];
if (task.completedValue) {
[self continueAutomaticModeWithList:list taskIndex:index + 1];
return;
}
[UIAlertView showAlertViewWithTitle:@"Task" message:task.name cancelButtonTitle:@"Stop" otherButtonTitles:@[@"Click to go to next action", @"Click to go to next action and notify user"] handler:^(UIAlertView *alertView, NSInteger buttonIndex) {
if (buttonIndex > 0) {
[MagicalRecord saveWithBlock:^(NSManagedObjectContext localContext) {
[[task MR_inContext:localContext] setCompletedValue:buttonIndex == 1];
} completion:^(BOOL success, NSError *error) {
[self.tableView reloadData];
}];
[self continueAutomaticModeWithList:list taskIndex:index 1];
}
}];
}
【问题讨论】:
-
你的问题我不清楚。 1)“它们没有显示/显示为无效”是什么意思?您的问题中没有显示任何内容的代码。 - 2)如何删除任务,“删除的任务仍然计数”是什么意思?您的代码中没有“计数”。 - 3) “index”是“DIDTask”的属性吗?它在哪里设置?您是否假设删除对象时会更新“索引”?
-
Martin,假设我有一个列表名称:“启动您的计算机”,与之相关的任务是 1)“插入计算机”,2)“插入所有外围设备”和 3)“按开始按钮”。如果我希望应用程序选择和显示任务 1)、2) 和 3),我没有任何问题。但是假设我删除了任务 2),然后它会显示为“插入计算机”、“”、“按开始按钮”。我应该只是“插上你的电脑”,“按下开始按钮”。任务 2) 显示为“”,而它甚至不应该存在。
-
如何在tableview中显示任务?您使用获取的结果控制器吗?如果没有,删除任务时如何更新表格视图?获取请求是什么样的?
-
它们在警报视图中一一显示。请参阅上面的代码,因为我刚刚更新了它。
-
删除一个对象不会改变其余对象的
index属性。如果您搜索index == 1并且该对象已被删除,那么您将获得nil,而不是下一个未删除的对象。
标签: ios core-data xcode5 nspredicate predicatewithformat