NSPredicate格式中第二个参数的“无效谓词:无RHS”
这是我的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
格式在variables参数列表中所期望的。 如果你传递一个64位整数,那么读取下一个variables参数将读取额外的4个零字节。
下表显示了哪种格式适用于哪种整数types:
格式CtypesSwifttypes ----------------------------------- %d int Int32 %ld long int Int %lld long long int Int64
对于无符号types也是如此。
或者,将整数转换为NSNumber
对象并使用%@
格式,这适用于所有大小的整数。 例:
let value = 1234 let predicate = NSPredicate(format: "value = %@", value as NSNumber)
你插入零,因为searchTextField没有任何东西。
所以只有在谓词中才会显示为零。
检查文本框中的值。
希望能帮助到你..
- Error“Thread 1:EXC_BAD_INSTRUCTION(code = EXC_I386_INVOP,subcode = 0x0)”是什么意思?
- 如何确保OperationQueue中的操作一个接一个地完成
- 如何在Core Data上下文之外使用Core Data模型子类?
- iOS lazy var UIBarButtonItem目标问题
- 当应用程序处于后台iOS时的Firebase数据库事务
- 如何告诉我的UITableViewCell在内容更改时自动resize?
- 如何改变UIAlertController的色彩颜色?
- 使用密钥和消息在swift中创build哈希
- 如何使用Swift采样器播放音调,然后在播放下一个之前暂停?