NSPredicate / TableView只显示一个项目,为什么?

时间:2013-04-29 08:13:26

标签: ios cocoa-touch uitableview core-data

我正在开发一个我有两个实体的应用,Post< - >> StreamType。当我创建帖子时,我分配StreamType:s,如下所示:

// streamType == one of my default streamTypes
[post addStreamTypesObject:streamType];

我查找具有特定StreamType的帖子的谓词如下所示:

predicate = [NSPredicate predicateWithFormat:@"ANY streamTypes.type = %@", [NSNumber numberWithInt:self.pageType]];

我不确定为什么会这样。有什么想法吗?

修改

我基本上想要的是获取具有正确Posts的所有StreamType。毕竟我的fetchrequest只返回数据库中的1个项目。所以我的tableview可能没什么问题。

编辑3 问题在于我的关系,应该是多对多,而不是一对多。因此它只返回一个帖子项目。

2 个答案:

答案 0 :(得分:2)

首先:测试其他代码是否正常。简单地说,删除谓词(注释setPredicate行)。您应该在tableview中看到所有对象。

右?

第二步:检查self.pageType是否设置正确。我没有在你的代码中看到你如何设置self.pageType 测试你的谓词,添加这样的NSLog并检查结果是否正常:

NSLog(@"ANY streamTypes.type = %d", self.pageType);

第三: 据我了解,你有这种情况:

One Post只有一种流类型 一种流类型有多个帖子。

ANY关键字用于您想要的情况,例如,获取至少一次满足特定条件的所有流类型。例如(假设您的帖子上有一个“内容”实例变量,包含帖子的文本)

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY post.content CONTAINS[cd] %@", @"aWord"];

在这种情况下,您将获得所有流类型,其中包含文本中包含“aWord”特定单词的帖子。

你的情况比较简单。我认为你应该简单地使用:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"streamTypes.type = %d", self.pageType];

试着让我知道

答案 1 :(得分:0)

我在使用Swift的Core Data时遇到了同样的问题,只是想在其他任何人遇到类似问题时添加这个答案。

这是我的NSPredicate代码:

  

让谓词= NSPredicate(格式:“routine ==%@”,self.selectedRoutine)

Routine拥有多个我想要返回的运动对象。练习只能有一个例程,但例程可以有很多练习。

事实证明,我忘了在使用数据模型检查器的常规实体中选择“To Many”作为练习关系的关系类型。它被设置为'To One'。

enter image description here