NSPredicate/TableView 只显示一项,为啥?
Posted
技术标签:
【中文标题】NSPredicate/TableView 只显示一项,为啥?【英文标题】:NSPredicate/TableView only displays one item, why?NSPredicate/TableView 只显示一项,为什么? 【发布时间】:2013-04-29 08:13:26 【问题描述】:我正在开发一个应用程序,其中有两个实体 Post
> StreamType
。当我创建帖子时,我会像这样分配StreamType
:s:
// streamType == one of my default streamTypes
[post addStreamTypesObject:streamType];
我查找具有特定StreamType
的帖子的谓词如下所示:
predicate = [NSPredicate predicateWithFormat:@"ANY streamTypes.type = %@", [NSNumber numberWithInt:self.pageType]];
我不确定为什么会发生这种情况。有什么想法吗?
编辑
我基本上想要的是获取所有具有正确StreamType
的Posts
。毕竟我的 fetchrequest 似乎只从数据库中返回 1 项。所以我的表格视图可能没有问题。
编辑 3 问题出在我的关系上,应该是多对多,而不是一对多。因此它只返回了一个 Post 项目。
【问题讨论】:
添加更多代码!您如何/在哪里打印该日志?你怎么知道在 fetch 之后返回了多个对象? ecc ecc... 此外,粘贴您的 numberOfRowInSection: 和 cellForRowAtIndexPath: 方法 我已经添加了一些说明。 在这种情况下,最好打开 SQLDebug 并查看生成的输出,看看 SQL Query 是否有问题。 你如何获取对象来提供表格视图? @LombaX 我添加了一些额外的代码。 【参考方案1】:首先:测试其他代码是否正常。简单地说,删除谓词(注释 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];
试着告诉我
【讨论】:
谢谢。目前的情况正好相反。每个帖子可以有多个streamType(因为它可以在不同的流中使用),但每个streamType只能有一个帖子。写这句话可能已经把错误说清楚了,应该是多对多的关系吧? ???如果每个流类型只能有一个帖子,则结果是正确的。您使用一种流类型进行过滤,您将获得一篇文章。相反,如果它是多对多(与以前的情况不同,许多发布许多流类型),则谓词似乎是正确的。第一次和第二次尝试呢? 哈哈,谢谢,这就是问题所在。总是很简单! :)【参考方案2】:我只是在 Swift 中使用 Core Data 时遇到了同样的问题,只是想添加这个答案,以防其他人遇到类似的问题。
这是我的 NSPredicate 代码:
让谓词 = NSPredicate(格式: "routine == %@", self.selectedRoutine)
Routine 包含多个我试图返回的锻炼对象。一个练习只能有一个套路,但一个套路可以有很多套路。
原来我忘记在我的常规实体中使用数据模型检查器选择“To Many”作为练习关系的关系类型。它被设置为“To One”。
【讨论】:
以上是关于NSPredicate/TableView 只显示一项,为啥?的主要内容,如果未能解决你的问题,请参考以下文章
wc统计命令 -l只显示行数 -w只显示单词数 -c只显示字节数
wc统计命令 -l只显示行数 -w只显示单词数 -c只显示字节数
bootstrap datetimepicker 中只显示年或者只显示月份