错误“在swift中因未捕获的异常'NSInvalidArgumentException'终止应用程序

时间:2018-06-18 08:32:52

标签: swift xcode timer

原因:' - [Arr setTime:]:无法识别的选择器发送到实例0x60400027ca80'“

Arr是数据模型实体,只包含一个属性(类型为字符串的'time'),'array'不为空。

我认为必须在viewDidLoad中使用'@objc func updateTime()'和'Timer'做一些事情

    var array = [Arr]()
    var ringTime = Arr()

    override func viewDidLoad() {
            super.viewDidLoad()

            Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
            if array.contains(ringTime){
                print("HELLO")
            }

        }

    @objc func updateTime() {
            ringTime.time = DateFormatter.localizedString(from: NSDate() as Date, dateStyle: .none, timeStyle: .short)
        }

func getData() {
        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        do {
             array = try context.fetch(Arr.fetchRequest())
             items = try context.fetch(Item.fetchRequest())
        }catch{
            print("failed to get the data")
        }

    }

enter image description here

在其他viewcontroller中(将数据添加到Arr): -

@IBAction func savePressed(_ sender: UIBarButtonItem) {
    let entity  = Item(context: context)
    let entity2 = Arr(context: context)
    entity.time = timeLbl.text
    entity.isOn = true
    entity2.time = timeLbl.text
    saveData()
    self.dismiss(animated: true, completion: nil)
}

这些是进一步的细节: -

libsystem_kernel.dylib`__pthread_kill:

    0x10d0b9d38 <+0>:  movl   $0x2000148, %eax          ; imm = 0x2000148 
    0x10d0b9d3d <+5>:  movq   %rcx, %r10
    0x10d0b9d40 <+8>:  syscall 
    0x10d0b9d42 <+10>: jae    0x10d0b9d4c               ; <+20>
    0x10d0b9d44 <+12>: movq   %rax, %rdi
    0x10d0b9d47 <+15>: jmp    0x10d0b2caf               ; cerror_nocancel
->  0x10d0b9d4c <+20>: retq   
    0x10d0b9d4d <+21>: nop    
    0x10d0b9d4e <+22>: nop    
    0x10d0b9d4f <+23>: nop    

2 个答案:

答案 0 :(得分:0)

由于异常的确切位置未知,因此问题必须是在ringTime中比较array

    if array.contains(where: { (arr) -> Bool in
        arr.time == ringTime.time
    }) {
        print("Hello")
    }

我可以通过更多信息为您提供更多帮助。

答案 1 :(得分:0)

我没有看到Arr的实施。

猜测@objc变量前面可能缺少time