![](/img/trans.png)
[英]NSPredicate in NSFetchedResultsController throwing EXC_BAD_ACCESS
[英]NSPredicate throwing EXC_BAD_ACCESS
我正在嘗試刪除用戶選擇的書,並且在NSPredicate行獲得EXC_BAD_ACCESS。 誰能告訴我我在哪里做錯了?
func deleteSelectedBook() {
// Create Fetch Request
let fetchRequest = NSFetchRequest(entityName: "BookEntity")
// Create array string for predicate
var titleCollection:[String] = []
var formatString:String = ""
if let selectedCellCollection = self.tableView.indexPathsForSelectedRows {
for index in selectedCellCollection{
if (!formatString.isEmpty) {
formatString += " OR "
}
var temp = (self.tableView.cellForRowAtIndexPath(index)?.textLabel?.text)!
titleCollection.append(temp)
formatString += " title = %@ "
}
}
// Configure Fetch Request
fetchRequest.predicate = NSPredicate(format: formatString, titleCollection)
......
對於兩個(作為示例)所選項目, formatString
將為
"title = %@ OR title = %@"
需要兩個參數,但是在
NSPredicate(format: formatString, titleCollection)
僅給出一個參數。 你可以用
NSPredicate(format: formatString, argumentArray: titleCollection)
現在titleCollection
提供了用於謂詞創建的所有參數。 但是更好,更簡單的解決方案是
NSPredicate(format: "title IN %@", titleCollection)
帶有固定謂詞格式字符串。
通常,應避免使用字符串操作來創建謂詞格式的字符串。 在這種情況下,簡單謂詞可以達到相同的目的。 在更復雜的情況下,可以使用NSCompoundPredicate
動態地構建謂詞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.