1

我正在开发一个应用程序,其中有两个实体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 项。所以我的表格视图可能没有问题。

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

4

2 回答 2

2

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

对?

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

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

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

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

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

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

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

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

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

试着让我知道

于 2013-04-29T10:10:13.713 回答
0

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

这是我的 NSPredicate 代码:

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

例程包含多个我试图返回的锻炼对象。一个练习只能有一个套路,但一个套路可以有很多套路。

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

在此处输入图像描述

于 2016-03-18T06:28:28.297 回答