复合语句时 Swift NSPredicate 抛出 EXC_BAD_ACCESS(Code=1, address=0x1)

标签 swift core-data nspredicate

我正在尝试在 Swift 中使用 NSPredicate 来查询核心数据,但在尝试运行它时会抛出 EXC_BAD_ACCESS(Code=1, address=0x1) 错误,我做错了什么?

这是发生错误的文件

class LevelsScreenModel : UIViewController {

func getWord(level: Int, section: Int) -> String
{
    let fetchRequest = NSFetchRequest(entityName: "Words")

    //This is the line where the error happens
    fetchRequest.predicate = NSPredicate(format: "level = %@", level)
    fetchRequest.predicate = NSPredicate(format: "section = %@", section)

    let word = AppDelegate().managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as [Words]

    if(word.count > 1)
    {
        for words in word
        {
            println(words.word)
            return words.word
        }
    }

    return "ERROR"
  }
}

最佳答案

谓词格式字符串中的 %@ 占位符用于 Objective-C 对象,因此您必须将整数包装到 NSNumber 中:

fetchRequest.predicate = NSPredicate(format: "level = %@", NSNumber(integer: level))

或者使用 ld 来格式化一个(长)整数:

fetchRequest.predicate = NSPredicate(format: "level = %ld", level)

还要注意

fetchRequest.predicate = NSPredicate(format: ...)
fetchRequest.predicate = NSPredicate(format: ...)

创建一个复合谓词,秒赋值只是 覆盖第一个。您可以使用 NSCompoundPredicate:

let p1 = NSPredicate(format: "level = %ld", level)!
let p2 = NSPredicate(format: "section = %ld", section)!
fetchRequest.predicate = NSCompoundPredicate.andPredicateWithSubpredicates([p1, p2])

或者简单地将谓词与“AND”组合起来:

fetchRequest.predicate = NSPredicate(format: "level = %ld AND section = %ld", level, section)

关于复合语句时 Swift NSPredicate 抛出 EXC_BAD_ACCESS(Code=1, address=0x1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28620794/

相关文章:

ios - 在自定义 UIView 的 updateConstraint 函数中获取帧大小

macos - OS X 10.10 Yosemite - 添加菜单

iphone - 使用 UIManagedDocument 在 iOS 5 中预加载核心数据数据库

ios - NSPredicate 按名称传递 "multiple"参数 [在 Swift 中]

Swift SpriteKit 创建可变路径 (CGMutablePathRef)

ios - 如何使用 swift 检查字符串值是否在数组中

ios - 将 Google Analytics 添加到项目后 CoreData 方法出错

objective-c - 通过 NSConnection 同步分布式对象问题

swift - Layer.com 快速解锁用户

ios - 提高大型数据集上谓词的性能