致命错误:索引超出范围:文件 Swift/ContiguousArrayBuffer.swift,第 444 行

时间:2021-03-20 00:25:25

标签: swift xcode

我正在处理一个项目,在该项目中我遇到了一个问题,试图从核心数据中的 .txt 数据更新 UISwitch 标记值。出现问题:let currentGroup = tagResults[0].xGroup 在那里我得到线程 1:致命错误:索引超出范围。我一直在这里拔头发。我不确定为什么我不断收到此错误。任何帮助将不胜感激。

完整代码:

override func viewDidLoad() {
    super.viewDidLoad() 

    let appDelegate = UIApplication.shared.delegate as? AppDelegate
       managedObjectContext = appDelegate?.managedObjectContext
       
       insertXORData()

       let request: NSFetchRequest<XOR> = XOR.fetchRequest()

       request.predicate = NSPredicate(format: "tag != nil", argumentArray: [#keyPath(XOR.tag)])

       do {
           let results = try managedObjectContext?.fetch(request)
           currentGroup = results?.first

           populate(xOR: (results?.first)!)
       } catch let error as NSError {
         print("Could not fetch \(error), \(error.userInfo)")
       }

}



func populate(xOR: XOR) {

guard let tag = xOR.tag as NSNumber?, let xGroup = xOR.xGroup as NSNumber? else { return }
    
print("xOrDict: \(tag),\(xGroup)")

}

@IBAction func xOrSwitches(_ sender: UISwitch) {
    
            let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "XOR")

            let tagPredicate = NSPredicate(format: "tag == %i", sender.tag)

            fetchRequest.predicate = tagPredicate

            var tagResults = [XOR]()

            do {
                
                tagResults = try managedObjectContext!.fetch(fetchRequest) as! [XOR]
            } catch let xOrError as NSError {
                print("Error fetching XOR: \(xOrError)")
            }

            let currentGroup = tagResults[0].xGroup

    let xPredicate = NSPredicate(format: "xGroup == %@", currentGroup)

            fetchRequest.predicate = xPredicate

            var groupResults = [XOR]()

            do {
                 groupResults = try managedObjectContext!.fetch(fetchRequest) as! [XOR]
            } catch let groupError as NSError {
                print("Error fetching XOR: \(groupError)")
            }

            if sender.isOn {
                for member in groupResults {
                    if member.tag.intValue != sender.tag {
                        form?.setValue(false, forKey: "switch\(member.tag)")
                    } else {
                        form?.setValue(true, forKey: "switch\(member.tag)")
                    }
                }
            } else {
                form?.setValue(false, forKey: "switch\(sender.tag)")
            }

            form?.setValue(true, forKey: "updateNeeded")
            print("update needed for \(String(describing: form))")
            if let list = switchList {
                for toggle in list {
                    guard let toToggle = form?.value(forKey: "switch\(toggle.tag)") as? Bool else {return}
                    toggle.setOn(toToggle, animated: true)
                }
            }

}

func insertXORData() {

  let fetch: NSFetchRequest<XOR> = XOR.fetchRequest()
  fetch.predicate = NSPredicate(format: "tag != nil")

    guard let count = try! managedObjectContext?.count(for: fetch) else { return }

  if count > 0 {
    // xOrGroup.txt data already in Core Data
    return
  }
  let path = Bundle.main.path(forResource: "xOrGroup", ofType: "txt")
  let dataArray = NSArray(contentsOfFile: path!)!

  for dict in dataArray {
    guard let managedObjectContext = managedObjectContext else {return}
    let entity = NSEntityDescription.entity(forEntityName: "XOR", in: managedObjectContext)!
    let xOR = XOR(entity: entity, insertInto: managedObjectContext)
    let xORDict = dict as! [String: Any]

    xOR.tag = xORDict["tag"] as! NSNumber
    xOR.xGroup = xORDict["xGroup"] as! NSNumber

  }
    try! managedObjectContext?.save()
}

我在控制台中得到的错误代码: 致命错误:索引超出范围:文件 Swift/ContiguousArrayBuffer.swift,第 444 行 2021-03-19 17:14:22.855358-0700 FDA[4842:1616264] 致命错误:索引超出范围:文件 Swift/ContiguousArrayBuffer.swift,第 444 行 (lldb)

0 个答案:

没有答案
相关问题