这是我的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
难道不奇怪吗?
答案 0 :(得分:6)
在所有当前的iOS和OS X平台上,C int
是一个32位整数,
这就是%d
格式对变量参数列表的期望。
如果传递64位整数,则读取下一个变量参数
将读取额外的4个零字节。
下表显示了哪种格式为整数类型:
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)
答案 1 :(得分:0)
您正在插入nil,因为searchTextField中没有任何内容。
所以只有它在谓词中显示为nil。
检查文本字段中的值。
希望有所帮助......