NSFetchRequest 和 predicateWithBlock

2024-01-29

我正在使用一个使用 Core Data 和 NSManagedObjects 来填充 UITableView 的应用程序。我的应用程序中只有一个类,称为Event。我创建了以下自定义实例方法Event:

- (BOOL)isExpired {
    return ([[self.endOn dateAtEndOfDay] timeIntervalSinceNow] < 0);
}

我想限制UITableView显示Event仅反对过期的事件 - 也就是说,isExpired回报YES。我尝试通过添加一个来做到这一点NSPredicate to the NSFetchRequest:

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary * bindings) {return([evaluatedObject isExpired]);}];
[fetchRequest setPredicate:predicate];

但我收到错误:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Problem with subpredicate BLOCKPREDICATE(0x272ac)' ***。这是否意味着您不能将块谓词与 NSFetchRequest 一起使用?或者我只是构建不当?

谢谢你!


因此,我们似乎已经在原始帖子的评论中确定,这可能是由于 SQLite 存储与块谓词不兼容造成的,因为 Core Data 无法将这些谓词转换为 SQL 以在存储中运行它们(感谢 JoostK)。

可能有几种方法可以克服这个问题:

  • 假设实体的结束日期是常规属性,您也许能够将到期约束表示为谓词格式字符串而不是块谓词,Core Data 应该能够将其转换为 SQL 子句。
  • 如果上述情况可行,您可能会更喜欢使用获取请求模板 http://developer.apple.com/iphone/library/documentation/cocoa/conceptual/CoreData/Articles/cdUsingMOM.html#//apple_ref/doc/uid/TP40005190-SW7检索过期的项目。您需要传递一个替换变量,例如$NOW不过,可以访问当前日期。这样做的优点是使谓词模板显示在模型编辑器中。
  • 然而,这两种方法都有重复现有功能的缺点(即您的isExpired方法)。因此,另一种方法是首先获取所有合格实体,无论其过期状态如何,然后对结果实体集运行专用过滤步骤以清除未过期的实体。因为到那时,它们已经从商店中完全复活,您应该能够为此使用块谓词。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSFetchRequest 和 predicateWithBlock 的相关文章

  • Eddystone 信标检测问题

    以下是我使用 iPhone iOS 9 检测 Eddystone 的代码 void viewDidLoad super viewDidLoad if CLLocationManager locationServicesEnabled loc
  • 如何对 iPad 应用程序进行类转储?

    我正在尝试运行 iPad 应用程序的类转储来探索其架构 我使用 The Unarchiver 提取了 ipa 文件 并从 Payload 文件夹中对 app 文件运行了 class dump 但是 我收到此错误 Generated by c
  • 如何执行 UIAlertAction 的处理程序?

    我正在尝试编写一个帮助程序类以允许我们的应用程序支持两者UIAlertAction and UIAlertView 然而 当写alertView clickedButtonAtIndex 方法为UIAlertViewDelegate 我遇到
  • 设置使用 iPhone 相机拍摄的图像的类型

    如果我们使用 iPhone 相机拍摄照片 图像将默认以 JPEG 格式保存 我想以其他格式 例如 PNG 保存捕获的图像 是否可以 当我们从应用程序调用 iPhone 相机时 是否可以通过代码执行此操作 我们可以设置捕获图片后必须保存的图像
  • 如何改进 iOS 中的 TWTweetComposeViewController 代码?

    我已经实现了以下代码来进行 Twitter 共享 在我的代码中 我尝试测试 iOS 5 如果这不起作用 我会回到使用 ShareKit 的 Twitter 代码进行共享的旧方式 我向同事展示了代码 他建议我的代码可能有缺陷 我需要做两件事
  • 替代已弃用的 NSNibLoading 方法(loadNibFile:、loadNibNamed: 等)?

    我发现 NSBundle 中的 NSNibLoading 方法 NSBundle loadNibFile externalNameTable withZone NSBundle loadNibNamed owner NSBundle loa
  • 在 Objective C 中使用下划线作为属性名称前缀 [重复]

    这个问题在这里已经有答案了 我以前避免在变量名中使用下划线 这可能是我大学 Java 时代的遗留下来的 因此 当我在 Objective C 中定义属性时 我自然会这样做 In the header interface Whatever N
  • 自动布局和ios5

    我正在使用故事板 我已经使用了自动布局 但它不适用于 ios5 并且会崩溃 所以我想删除它 但是 如何取消选中自动布局 但如果我取消选中自动布局 我如何为 iPhone 4 和 5 设置屏幕 Regards 您可以在 IB 中禁用自动布局
  • 如何从 NSString 中删除十六进制字符

    我面临一个与字符串中的某些十六进制值相关的问题 我需要从字符串中删除十六进制字符 The problem is when i print object it prints as BLANK line And in debug mode it
  • 如何在 Xcode 4 中通过一个操作归档多个目标

    我有一个包含多个目标的项目 这些目标都适用于不同的 iOS 应用程序 例如 一个用于精简版的目标 另一个用于专业版的目标 我想立即构建并归档我的所有应用程序 目前 我对每个目标都有一个方案 我用它来独立归档每个应用程序 但现在我必须开始归档
  • iPhone SDK - 在后台线程中运行重复进程

    我有一个iPhone我想在其中每隔一段时间在后台执行一个方法的应用程序1第二 所以在我的主线程中 我有以下代码UIViewController viewDidLoad NSTimer timerWithTimeInterval 1 0 ta
  • 增加 NSData 的长度

    基本上 我有一个 46 个字符的 NSString 我将其转换为 NSData 我需要将字符串填充到 48 个字符 仅在 NSString 末尾添加 是行不通的 所以 我只是使用以下方法增加了 NSData 的长度 NSString str
  • Xcode MyProjectName-Bridging-Header.h 不存在

    我想开始在我的 Objective C 项目中使用 Swift 所以我添加了一个快速类 import Foundation objc class System NSObject objc func printSome println Pri
  • 获取 Cocoa 中文件的类型

    我成功找到了指定文件的扩展文件类型 JPEG 图像 TIFF 图像等 但我正在寻找更通用的东西 可以对 大类别 中的文件进行分类 如图像 moovies 文本文件等 有没有办法在可可 或 Objective C 中实现这一点 感谢您的帮助
  • 检测 UITableView 中的水平平移

    我正在使用 UIPanGestureRecognizer 来识别 UITableView 中的水平滑动 准确地说是在单元格上 尽管它已添加到表格本身 然而 这个手势识别器显然窃取了桌子上的触摸 我已经让 pangesturerecogniz
  • 以编程方式更改 UISlider 的范围

    如何以编程方式设置 UISlider 的最小最大范围 例如 虚拟代码 UISlider slider UISlider alloc init slider min 3 slider max 3 EDIT 所以我有以下内容 sl minimu
  • 防止 UITableView 滚动到某个点以下

    如何让 UITableView 允许在某个索引行上方滚动 但在低于某个点时阻止滚动 例如 如果我有第 1 行到第 100 行 其中在给定时间视图中仅出现 5 行 我希望允许用户在第 1 50 行之间滚动 但在第 50 行可见时阻止进一步向下
  • iOS 中的词干 - 不适用于单个单词

    我在用NSLinguisticTagger用于词干提取 我能够获得句子中单词的词干 但无法获得单个单词的词干 以下是我正在使用的代码 NSString stmnt i waited NSLinguisticTaggerOptions opt
  • 将子视图发送到后面

    我正在尝试模仿 facebook ios 侧面菜单并让它工作 但是我遇到的问题是我无法将侧面菜单发送到后面 正如另一个问题中所讨论的那样使用 Objective C 的 iphone facebook 侧边菜单 https stackove
  • NSUserDefaults、Settings.bundle 和应用程序组

    我有一个有 2 个目标的应用程序 主应用程序和 Today 扩展 为了在这些目标之间共享设置 我打开了应用程序组功能 添加了一个组group myApp com然后使用NSUserDefaults在主应用程序和今日扩展中都是如此 var d

随机推荐

  • SwiftUI 中的 Alert + ProgressView(活动指示器)

    Is there any way to add Activity View Indicator into SwiftUI Alert somewhere I m just curious because I haven t found an
  • 将 tf.distribute 策略与 tf.keras 模型子类化结合使用

    我目前有一个 tf keras 模型子类 但无法使用 GPU 分发策略 尽管 Tensorflow 网站上声明我可能收到一个错误 告诉我相反的情况 我发现的一种解决方案是将模型包装在 tf keras models Model 中 但这导致
  • 重新组装分段上传中生成的文件块

    我正在使用优秀的 flow js 库来处理文件上传 这是一个可恢复的 HTML5 上传 会在服务器上生成一堆必须重新组装的块 例如 foo mov 可能会变成 timestamp foomov 1 timestamp foomov 2 ti
  • 发布时的 GitHub Actions 创建的工作流触发器不起作用

    我有一个GitHub 操作 https docs github com en actions在我的存储库的主分支上实现的工作流程 它创建了一个新的release https docs github com en github adminis
  • deque::insert() 在索引处?

    我如何insert 一堆物品到中间deque在线性时间内 我要插入的项目是not可通过 STL 风格的迭代器访问 有一个deque insert iterator pos const T x 函数占据位置pos as deque itera
  • 如何在 Three.js 中根据对象位置和旋转来正确旋转 raycaster

    我有 8 个从 Object3D 到不同方向的光线投射器用于碰撞检测 我想根据对象旋转来旋转它们指向的方向 我已经遵循了解决方案here https github com mrdoob three js issues 1606 光线投射器开
  • CUDA 中的稀疏矩阵向量乘法

    我正在尝试在 GPU 上实现矩阵向量乘法 使用 CUDA 在我的 C 代码 CPU 中 我将矩阵加载为密集矩阵 然后使用 CUDA 执行矩阵向量乘法 我还使用共享内存来提高性能 知道我的矩阵是稀疏矩阵 如何以有效的方式加载矩阵 下面是我的
  • 如何通过 *ngFor 在 Angular 2 TypeScript 前端显示 json 数组

    下面是 angular2 简单的前端页面 table class table tr th title th th description th tr tr td notes title td td notes body td tr tabl
  • MySQL:使用附加哈希字段的唯一文本字段

    在我的 MySQL 数据库中 我有一个表定义如下 CREATE TABLE mytablex cs id mediumint 8 unsigned NOT NULL AUTO INCREMENT tag varchar 6 COLLATE
  • MySQL JOIN 行(如果存在)否则填充 NULL

    我有两张人名和财产表 有些还没有条目 我想创建所有人及其属性 如果可用 的完整列表 否则将他们与属性 NULL 一起列出 这是我的简化示例 names id name 1 Jon 2 Peter 3 Sam 4 Bruce 特性 names
  • 在多选模式下启用/禁用列表视图中的项目选择

    我在多选模式下为上下文菜单注册了一个列表视图 private void initListViewForContextMenu log d FilesFragment initListViewForContextMenu ListView l
  • 自定义 jqGrid 中的添加/编辑对话框

    抱歉 我不能发布图片 我太新了 在 jqGrid 添加 编辑对话框中 我想根据之前所做的选择加载可选项目的列表 在上图中 应根据条件选择中选择的值加载值选择 我相信要走的路线是使用 editoptions 对象中的 dataurl 但我在这
  • 找不到 javafx.controls JavaFX 11 / JDK 11.0.1 [重复]

    这个问题在这里已经有答案了 我正在使用 IntelliJ 我已经尝试过所有其他似乎对其他人都有效的解决方案 我收到一个错误 Caused by java lang IllegalAccessError class com sun javaf
  • 使用泛型参数关闭

    我在将以下函数编写为闭包时遇到问题 func myfunc
  • 删除 VSCode PHP 调试中的字符限制

    在 PHP 中进行调试并使用左侧的变量窗格时 将鼠标悬停在该变量 对象上时可以看到的字符数是有限的 无论如何 是否可以查看该变量的完整有效负载或除了必须使用之外的任何解决方法file put contents每次我想看到一个大的变量值 将变
  • jQuery data() 返回未定义,attr() 返回整数

    我有以下代码 alert embellishment data embellishmentId alert embellishment attr data embellishmentId 第一个警报返回undefined 而第二个警报返回一
  • 如何在 Perl 中异步运行系统命令?

    我目前有一个 Perl 脚本 它在系统上运行外部命令 收集输出 并根据返回的内容执行一些操作 现在 这是我运行它的方式 其中 cmd 是带有命令设置的字符串 output cmd 我想更改此设置 以便如果命令挂起并且在很长时间后没有返回值
  • Lucene 模糊搜索客户名称和部分地址

    我浏览了所有现有的问题帖子 但找不到相关的内容 我有数百万条记录 包括个人名字 姓氏 地址 1 地址 2 国家 地区代码 出生日期 我想每天使用上述文件检查我的客户列表 我的客户列表也会每天更新 并且文件也每天更新 对于名字和姓氏 我想要模
  • 点击 iPhone 上的文本输入字段会弹出键盘,但打字不会输入任何文本

    我正在努力使页面更具响应性 为此 我试图确保网页在移动设备上的外观和功能符合预期 在桌面上 它按预期工作 在 iPhone 上 它看起来与预期一致 但无法按预期工作 如果您选择输入字段 它将聚焦并调出键盘 但是它不会让您输入任何内容 如果您
  • NSFetchRequest 和 predicateWithBlock

    我正在使用一个使用 Core Data 和 NSManagedObjects 来填充 UITableView 的应用程序 我的应用程序中只有一个类 称为Event 我创建了以下自定义实例方法Event BOOL isExpired retu