"Invalid predicate: nil RHS" NSPredicate 格式的第二个参数
"Invalid predicate: nil RHS" for second argument in NSPredicate format
这是我的 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
是不是很奇怪?
您正在插入 nil,因为 searchTextField 中没有任何内容。
这样只有它会在谓词中显示为 nil。
检查文本字段中的值。
希望对您有所帮助..
在所有当前的 iOS 和 OS X 平台上,C int
是一个 32 位整数,
这就是 %d
格式在可变参数列表中所期望的。
如果传递 64 位整数,则读取下一个变量参数
将读取额外的 4 个零字节。
以下table显示哪种格式适用于哪种整数类型:
Format C type Swift type
-----------------------------------
%d int Int32
%ld long int Int
%lld long long int Int64
无符号类型也是如此。
或者,将整数转换为 NSNumber
对象并使用
%@
格式,这有效
对于所有大小的整数。示例:
let value = 1234
let predicate = NSPredicate(format: "value = %@", value as NSNumber)
这是我的 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
是不是很奇怪?
您正在插入 nil,因为 searchTextField 中没有任何内容。
这样只有它会在谓词中显示为 nil。
检查文本字段中的值。
希望对您有所帮助..
在所有当前的 iOS 和 OS X 平台上,C int
是一个 32 位整数,
这就是 %d
格式在可变参数列表中所期望的。
如果传递 64 位整数,则读取下一个变量参数
将读取额外的 4 个零字节。
以下table显示哪种格式适用于哪种整数类型:
Format C type Swift type ----------------------------------- %d int Int32 %ld long int Int %lld long long int Int64
无符号类型也是如此。
或者,将整数转换为 NSNumber
对象并使用
%@
格式,这有效
对于所有大小的整数。示例:
let value = 1234
let predicate = NSPredicate(format: "value = %@", value as NSNumber)