【问题标题】:Swift error while do action执行操作时出现 Swift 错误
【发布时间】:2018-07-15 16:22:45
【问题描述】:

线程 1:EXC_BAD_ACCESS(代码=2,地址=0x7ffee3387ff8)

如果错了可以改正吗?我认为问题来自else if 声明{}

func fetchAndUpdateTableView(){
    if catagory == "Tools" {
        if let url = urlCoreData{
            switch (url) {
        case "All_m0":
            let shit = All_m0()
            coreVariables.results_All_M0 = shit.fetchProduct()!
            break
        case "Screw_drive":
            let  screwd = Screw_drive()
            coreVariables.results_Screw_Drive = screwd.fetchProduct()!
            break
        case "Wrench_m":
            let Wrenchm = Wrench_m()
            coreVariables.results_Wrench_M = Wrenchm.fetchProduct()!
            break
        default:
            break
        }
        }

        else if catagory == "Water Pressure"{
            if let url = urlCoreData{
                switch (url) {
                case "All_m1":
                    let All1 = All_m1()
                    coreVariables.results_All_M1 = All1.fetchProduct()!
                    break
                default:
                    break
                }

        }



        else if catagory == "Garden Equipments"{

            if let url = urlCoreData{
                switch (url) {
                case "All_m2":
                    let All2 = All_m2()
                    coreVariables.results_All_M2 = All2.fetchProduct()!
                    break
                default:
                    break


        }
            }


        }
   tableView.reloadData()
    }

}
}

//MARK: get and parse JSON

func processJsonData(resource : String) {
    let path = Bundle.main.path(forResource: resource, ofType: "json")
    do {
        let data = try Data(contentsOf: URL(fileURLWithPath: path!), options: .alwaysMapped)
        do{
            let object = try JSONSerialization.jsonObject(with: data as Data, options: .allowFragments)
            if let dictionary = object as? NSArray {
                fetch_Store_Functions.readJSONObject(object: dictionary, catagory: catagory, urlCoreData: urlCoreData)
            }
        } catch {
            // Handle Error
        }
    } catch let error {
        print(error.localizedDescription)
    }
}

func loadFunction(){
    if catagory == "Tools" {
        if let url = urlCoreData{
            switch (url) {
        case "All_m0":
          //  self.fetchAndUpdateTableView()
            if coreVariables.results_All_M0.count == 0{
                self.processJsonData(resource: selectedCatagory)
            }else{
                self.fetchAndUpdateTableView()
                tableView.reloadData()
            }
            break
        case "Screw_drive":
        //self.fetchAndUpdateTableView()
            if coreVariables.results_Screw_Drive.count == 0{
                self.processJsonData(resource: selectedCatagory)
                tableView.reloadData()
            }else{
                self.fetchAndUpdateTableView()
                tableView.reloadData()
            }
            break
        case "Wrench_m":
           // self.fetchAndUpdateTableView()
            if coreVariables.results_Wrench_M.count == 0{
                self.processJsonData(resource: selectedCatagory)
                tableView.reloadData()
            }else{
                self.fetchAndUpdateTableView()
                tableView.reloadData()
            }
            break
        default:
            break
        }
        }
    }else if catagory == "Water Pressure"{
            if let url = urlCoreData{
                switch (url) {
            case "All_m1":
                self.fetchAndUpdateTableView()
                if coreVariables.results_All_M1.count == 0{
                    self.processJsonData(resource: selectedCatagory)
                    tableView.reloadData()
                }else{
                    self.fetchAndUpdateTableView()
                    tableView.reloadData()
                }
                break
                default:
                    break
            }
        }
    }else if catagory == "Garden Equipments"{
        if let url = urlCoreData{
            switch (url) {
            case "All_m2":
                //  self.fetchAndUpdateTableView()
                if coreVariables.results_All_M2.count == 0{
                    self.processJsonData(resource: selectedCatagory)
                }else{
                    self.fetchAndUpdateTableView()
                    tableView.reloadData()
                }
                break
            default:
                break


        }
    }

    }
}

【问题讨论】:

  • 任何不小心写的感叹号 (!) 都可能导致应用程序崩溃。请再次阅读我对您上一个问题的回答:switch 情况下没有break 语句(default 除外)没有 snake_cased 变量名 在 Swift 中。
  • 请你举个例子来理解
  • 我不明白,因为我刚开始
  • 显然fetchProduct() 返回一个可选项。如果可选项为 nil,则强制展开 (!) 可选项会导致崩溃。请阅读有关选项的 Swift 语言指南。如果您是初学者,请接受有关语法和命名约定的建议。
  • 好的,我会努力解决的

标签: swift xcode if-statement swift3


【解决方案1】:

您需要将 Zombie Objects 放入您的方案中,然后进入配置文件工具、Zombies 并运行应用程序,看看它是否像这样捕获它。

当有内存分配给一个变量,然后释放它,然后另一个进程尝试使用该变量时,会发生此错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    相关资源
    最近更新 更多