当前位置: 首页 > 面试题库 >

NSPredicate格式的第二个参数为“ Invalid predicate:nil RHS”

袁翰池
2023-03-14
问题内容

这是我的NSPredicate

print(searchTextField.text!)
let predicate = NSPredicate(format: "student.schoolClass.id = %d AND (book.title CONTAINS[cd] %@ OR student.username CONTAINS[cd] %@)", currentSchoolClass.id, searchTextField.text!, searchTextField.text!)

我要做的下一件事是:

fetchedResultsController.fetchRequest.predicate = predicate
print(fetchedResultsController.fetchRequest.predicate!)
try! fetchedResultsController.performFetch() //here is the crash

控制台输出为:

j  
student.schoolClass.id == 1 AND (book.title CONTAINS[cd] nil OR student.username CONTAINS[cd] "j")

崩溃信息是:

CRASH: Invalid predicate: nil RHS

是不是很奇怪?


问题答案:

在所有当前的iOS和OS X平台上,C
int是32位整数,这是该%d格式在变量参数列表中所期望的格式。如果您传递64位整数,则读取下一个变量参数将读取额外的4个零字节。

下表显示了哪种整数类型的格式:

  格式C型Swift型
  -----------------------------------
  %d int Int32
  %ld long int Int
  %lld long long int Int64

对于无符号类型也是如此。

或者,将整数转换为NSNumber对象并使用%@格式,这适用于所有大小的整数。例:

let value = 1234
let predicate = NSPredicate(format: "value = %@", value as NSNumber)


 类似资料:
  • 问题内容: 什么是参数: 如果我这样做: 并具有两个Localizable.strings版本(英语和西班牙语),每个版本是否都需要输入: 英语难道不是多余的吗? 问题答案: 注释字符串被应用程序忽略。它用于翻译者的利益,可在您的应用程序中找到的键的上下文用法中添加含义。 例如,键在给定语言中的取值可能不同,具体取决于该短语在该语言中需要使用的正式或非正式程度(“ Whats up World”,

  • 问题内容: 有谁知道,为什么Oracle的(和)函数总是对第二个参数求值,即使第一个参数不是呢? 简单测试: 返回,但也打印。 已调用,即使由于第一个参数不是,结果也被忽略了。 问题答案: 一直都是这种方式,因此Oracle必须保持这种方式以保持向后兼容。 使用,而不是让短路行为。

  • 接受另一个需要是的参数。 如何设置一个?有没有留档的任何地方适用于Windows Phone 8. 如果我做,它的工作原理很棒!但它需要是POST与key="bla"的内容,某事="yay" //编辑 非常感谢你的回答...这工作得很好,但这里仍然有一些不确定性: 我假设数据“测试=某物”会在api方面作为发布数据“测试”,显然不会。另一方面,我可能需要通过发布数据发布整个对象/数组,所以我假设j

  • 在编写代码时候发现 toRef 无法传入第二个参数,因为 key 类型被指定成了 never。 我在vue官网上没发现有这个定义。。不太确定哪里出现了问题。

  • 简要描述 讲完 ExternalInterface.call 的第一个参数,我们接着来讲第“2”个参数,之所以 2 打上引号,因为 call 函数的原型是: call(functionName:String, ... arguments):*, 即后面可以有很多很多个参数,我们统称为第 2 个参数。有时候我们会遇到 ExternalInterface.call("xxxxx","可控内容");的情

  • 问题内容: 更新我和我之后,我会收到此类警告。我已经尝试过这些,但是没有用,每个建议都会受到赞赏。 问题答案: 我尝试过这些,它为我解决了同样的问题,只需将它们放在您的代码顶部