Core data 访问核心数据实体时发生错误
我试图从某个实体中获取一些记录,但在频繁获取记录时,我遇到了错误的访问错误,应用程序正在崩溃。请帮忙Core data 访问核心数据实体时发生错误,core-data,swift4,exc-bad-access,Core Data,Swift4,Exc Bad Access,我试图从某个实体中获取一些记录,但在频繁获取记录时,我遇到了错误的访问错误,应用程序正在崩溃。请帮忙 var mContext:NSManagedObjectContext! = appDelegate.persistentContainer.viewContext func getAllRoomName() -> [String] { let fetchRequest: NSFetchRequest<SwitchMO> = SwitchMO.fetc
var mContext:NSManagedObjectContext! = appDelegate.persistentContainer.viewContext
func getAllRoomName() -> [String] {
let fetchRequest: NSFetchRequest<SwitchMO> = SwitchMO.fetchRequest()
var arrRoomNames = [String]()
do {
if let arrSwitchesMo = try? mContext.fetch(fetchRequest) as? [SwitchMO]
{
for switchMo in arrSwitchesMo ?? []
{
arrRoomNames.append(switchMo.roomName ?? "")
}
}
} catch {
print("Error with request: \(error)")
}
arrRoomNames = Array(Set(arrRoomNames))
return arrRoomNames;
}
var mContext:NSManagedObjectContext!=appDelegate.persistentContainer.viewContext
func getAllRoomName()->[字符串]{
let fetchRequest:NSFetchRequest=SwitchMO.fetchRequest()
var arrRoomNames=[String]()
做{
如果让arrSwitchesMo=try?mContext.fetch(fetchRequest)作为?[SwitchMO]
{
对于arrSwitchesMo中的switchMo???[]
{
arrRoomNames.append(switchMo.roomName??“”)
}
}
}抓住{
打印(“请求错误:\(错误)”)
}
arrRoomNames=数组(集合(arrRoomNames))
返回房间名称;
}
访问错误
我怎样才能摆脱这个问题,请帮助我。如果您使用的是特定的获取请求,则类型转换是多余的。如果您使用的是
do catch
不要尝试?
func getAllRoomName() -> [String] {
let fetchRequest: NSFetchRequest<SwitchMO> = SwitchMO.fetchRequest()
var arrRoomNames = [String]()
do {
let arrSwitchesMo = try mContext.fetch(fetchRequest)
for switchMo in arrSwitchesMo {
arrRoomNames.append(switchMo.roomName ?? "")
}
arrRoomNames = Array(Set(arrRoomNames))
} catch {
print("Error with request: \(error)")
}
return arrRoomNames
}
如果代码仍然崩溃,则托管对象上下文为
nil
。按照核心数据模板中的建议,将上下文声明为非可选的。如果使用特定的获取请求,则类型转换是多余的。如果您使用的是do catch
不要尝试?
func getAllRoomName() -> [String] {
let fetchRequest: NSFetchRequest<SwitchMO> = SwitchMO.fetchRequest()
var arrRoomNames = [String]()
do {
let arrSwitchesMo = try mContext.fetch(fetchRequest)
for switchMo in arrSwitchesMo {
arrRoomNames.append(switchMo.roomName ?? "")
}
arrRoomNames = Array(Set(arrRoomNames))
} catch {
print("Error with request: \(error)")
}
return arrRoomNames
}
如果代码仍然崩溃,则托管对象上下文为
nil
。按照核心数据模板中的建议,将上下文声明为非可选的。从try?
更改为try
,并查看在fetch()期间是否出现错误let arrSwitchesMo=try mContext.fetch(fetchRequest)
更改为此,它再次崩溃@JoakimDanielsonChange从try?
到try
,并查看在fetch()期间是否出现错误。让arrSwitchesMo=try mContext.fetch(fetchRequest)
更改为此,它再次崩溃@JoakimDanielson,请查看相同的内容我再次崩溃。catch块没有被调用,它显示了错误的访问,正如我当时写的那样mContext
是nil
。不,它不是nil
我也检查过了,请参见,我还要检查fetchRequest堆栈跟踪中有什么?使用调试器。必须对异常原因进行说明。如果上下文不是nil
为什么要将其注释为隐式展开可选?是否设置了异常断点?如果没有,设置它。并在调试控制台中打开变量视图。获取请求不能是nil
,请阅读警告,请看这个,我又试了一次。catch块没有被调用,它显示了错误的访问,正如我当时写的那样mContext
是nil
。不,它不是nil
我也检查过了,请参见,我还要检查fetchRequest堆栈跟踪中有什么?使用调试器。必须对异常原因进行说明。如果上下文不是nil
为什么要将其注释为隐式展开可选?是否设置了异常断点?如果没有,设置它。并在调试控制台中打开变量视图。获取请求不能为nil
,请阅读警告。