gpt4 book ai didi

ios - NSPredicate - EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码=0x0)

转载 作者:行者123 更新时间:2023-11-29 02:20:32 26 4
gpt4 key购买 nike

我尝试使用多个 NSPredicates 从 CoreData 读取数据,但收到 EXC_BAD_INSTRUCTION (code= EXC_I386_INVOP, subcode=0x0)

这是我尝试读取数据的代码:

public class func fetchSetting(key: NSString, countryId: Int) -> Setting {
let fetchRequest = NSFetchRequest(entityName: "Setting")

var existingSetting: Setting?

let keyPredicate = NSPredicate(format: "key == %@", key)
let countryPredicate = NSPredicate(format: "countryId = %d", countryId)

let predicate = NSCompoundPredicate(type: NSCompoundPredicateType.AndPredicateType, subpredicates: [keyPredicate!, countryPredicate!])

fetchRequest.predicate = predicate

if let fetchResults = CoreDataHelper().managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [Setting] {
if (!fetchResults.isEmpty && fetchResults.count > 0) {
println(fetchResults.first!.value)
} else {
existingSetting = nil
}
} else {
existingSetting = nil
}

return existingSetting!
}

这就是我调用这个函数的方式:

override func viewDidLoad() {
super.viewDidLoad()
textColorSetting = SettingCoreData.fetchSetting("text_color", countryId: 3)
}

错误在 keyPredicatecountryPredicate 声明处。我尝试将 key 参数作为 StringNSString 但我不认为这是问题所在。我对 swift 还很陌生,我真的不知道这里出了什么问题。

最佳答案

通常情况下,EXC_BAD_INSTRUCTION 是由于解包了一个值为 nil 的变量。
当您 return existingSetting! 时,这正是您的代码中发生的情况,因为 existingSetting 在您的代码中始终为 nil(您可能缺少您编写 println(fetchResults.first!.value)) 的作业。

为了解决这个问题,您可以更改函数签名以返回可选的设置:

public class func fetchSetting(key: NSString, countryId: Int) -> Setting?

然后,在函数的最后,只返回existingSetting,而不用感叹号展开它。

return existingSetting

当您从 viewDidLoad() 调用 fetchSetting 函数时,您可以测试是否有非 nil 值,方法是使用典型的 Swift 结构 if let:

override func viewDidLoad() {
super.viewDidLoad()
if let textColorSetting = SettingCoreData.fetchSetting("text_color", countryId: 3) {
// Do stuff with textColorSetting
}
}

关于ios - NSPredicate - EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码=0x0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28201304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com