当前位置: 首页 > 面试题库 >

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

高高雅
2023-03-14
问题内容

我正在尝试在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)


 类似资料:
  • 7. 复合语句 复合语句包含(多组)其它语句;它们以某种方式影响或者控制其它那些语句的执行。通常,复合语句跨越多行,虽然一条完整的复合语句可以用简洁的形式包含在一行之中。 if、while和for语句实现传统的控制流句法结构。try指出一组语句的异常处理器和/或清理代码。函数和类定义在语法上同样也是复合语句。 复合语句由一个或多个‘子句’组成。一条子句由语句首和‘语句组’组成。一条特定的复合语句的

  • 复合语句是一个由括号括起来的语句列表。有许多种常见的括号格式化方式。如果你有一个本地标准,那请你与本地标准保持一致,或选择一个标准,并持续地使用它。在编辑别人的代码时,始终使用那些代码中使用的样式。 control { statement; statement; } 上面的风格被称为"K&R风格",如果你还没有找到一个自己喜欢的风格,那么可以优先考虑这个风格。在K

  • 你们不要论断人,就不被论断;你们不要定人的罪,就不被定罪;你们要饶恕人,就必蒙饶恕。你们要给人,就必有给你们的,并且用十足的升斗,连摇带按、上尖下流地倒在你们怀里;因为你们用甚么量器量给人,也必用甚么量器量给你们。(LUKE 6:37-38) 语句(1) 写程序,就好比小学生学习写作一样,先学习词语,然后造句,在写文章。 到目前为止仅仅学会了一些词语(各种类型的对象),从现在开始就学习如何造句子了

  • 问题内容: 我有三个查询结果。 查询1: 查询2: 查询:3 我想输出一个表,其中包含所有三个查询的结果,例如(很抱歉,但我必须在这里写更多内容,以便我可以提交此帖子。我希望这足够;-)): 我尝试了 但是,出现以下错误: 我不确定为什么这是错误的,或者在这里是否正确的方法。有人知道吗? 问题答案: 导致错误的直接原因是引用手册: (并且可以连接到如果一个子表达式 括在括号中 。如果没有括号,这些

  • 此请求引发了一个带有PostgreSQL的语句超时。 原因:org.postgresql.util.psqlexception:错误:由于在org.postgresql.core.v3.queryexecutorimpl.receiveerrorresponse(queryexecutorimpl.java:1525)在org.postgresql.core.v3.queryexecutorimp

  • 1. while语句 在第 3 节 “递归”中,我们介绍了用递归求n!的方法,其实每次递归调用都在重复做同样一件事,就是把n乘到(n-1)!上然后把结果返回。虽说是重复,但每次做都稍微有一点区别(n的值不一样),这种每次都有一点区别的重复工作称为迭代(Iteration)。我们使用计算机的主要目的之一就是让它做重复迭代的工作,因为把一件工作重复做成千上万次而不出错正是计算机最擅长的,也是人类最不擅