Я использую NSTimer для отправки сообщения на интервале. Вот код:Отправка сообщения о назначении NSTimer в другой класс; извлечение его параметра userInfo
{
// ....
var params : [String] = []
params.append(conversion)
params.append(message)
let timer = NSTimer(fireDate: date, interval: 60, target: self, selector: Selector("importTextMessage.sendMessage:"), userInfo: params, repeats: true)
NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
// ...
}
func sendMessage(params: [String]){ ...}
Я также попытался изменить на 2.2 синтаксис Swift:
let timer = NSTimer(fireDate: date, interval: 60, target: self, selector: #selector(importTextMessage.sendMessage(_:)), userInfo: params, repeats: true)
, но это ничего не меняет.
Из всех других вопросов, связанных с «Непризнанным селектором, отправленным экземпляру», ответ «включает в себя двоеточие в Селекторе, чтобы он знал, чтобы захватить аргументы из UserInfo», но я включил это и не могу выяснить, что не так.
Что Примечание:
Параметры для функции и параметры, передаваемые через NSTimer USERINFO DO совпасть. Это оба массива строк.
Если это что-то значит, код не работает при вызове sendMessage. На самом деле это не делает его sendMessage.
Я получаю странное предупреждение о том, что «строка буквальное не является допустимым селектором Objective-C»
Я попытался изменить мой код для моего SendMessage взять таймер в качестве аргумента, как 1 пользователь предложил: func sendMessage(timer: NSTimer){
но который по-прежнему дает ту же ошибку.
Благодарим за оказанную помощь заранее, я ценю это.
EDIT: здесь есть функция, которая запускает таймер: // Сохраняет все данные @IBAction Func saveText (отправитель: AnyObject) { вара телефона: Двойная вара активен: Int частота вара: Double вара сообщение: String дата вара: NSDate
phone = Double(currentNumber)!
active = 1
message = myTextView.text
date = myDatePicker.date
switch self.frequency.selectedRowInComponent(0) {
case 0:
frequency = 1
case 1:
frequency = 3
case 2:
frequency = 6
case 3:
frequency = 24
case 4:
frequency = 168
case 5:
frequency = 744
default:
frequency = 8760
}
importTextMessage.seedMessage(phone, active: active, frequency: frequency, message: message, date: date)
print(date)
let conversion : String = "+1" + String(Int(phone))
//importTextMessage.sendMessage("Ryan", to: conversion, message: message)
var params : [String] = []
params.append(conversion)
params.append(message)
//importTextMessage.sendMessage(params)
let timer = NSTimer(fireDate: date, interval: 60, target: self, selector: #selector(importTextMessage.sendMessage(_:)), userInfo: params, repeats: true)
//
NSRunLoop.mainRunLoop().addTimer(timer, forMode: NSRunLoopCommonModes)
}
EDIT: Точные mssg ошибки:
непризнанного селектора послал к экземпляру 0x7ffe6b915460 2016-07- 25 13: 26: 09,092 Беспокоить Ваш Кейт [53524: 9000621] *** Нагрузочного приложение из-за неперехваченное исключение 'NSInvalidArgumentException', причина: «- [Harass_Your_Kate.AddMessageViewController SendMessage]: непризнанный селектор направлен например 0x7ffe6b915460
Так как это правильно, это, вероятно, не должно быть опущено, но мне любопытно, почему. – BaseZen
Я не ответил на ваш ответ, но это не помогает. У меня есть точная вещь, которую вы и другой ответчик имеете, но это не изменяет ошибку. Он по-прежнему говорит, что приложение Terminating из-за неперехваченного исключения «NSInvalidArgumentException», непризнанный селектор, отправленный в экземпляр 0x13601f910 ' – Ryan
Если его Swift3 добавить подчеркивание перед первым параметром вашего метода –