簡體   English   中英

NSPredicate拋出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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM