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
,请阅读警告。