Ich verwende einen NSTimer, um eine Nachricht in einem Intervall zu senden. Hier ist der Code:Senden einer NSTimer-Zielnachricht an eine andere Klasse; Extrahieren seines userInfo-Parameters
{
// ....
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]){ ...}
Ich habe auch auf die Swift 2.2 Syntax versucht, zu ändern:
let timer = NSTimer(fireDate: date, interval: 60, target: self, selector: #selector(importTextMessage.sendMessage(_:)), userInfo: params, repeats: true)
aber das ändert nichts.
Von jeder anderen Frage, die über den "Nicht erkannten Selektor an Instanz gesendet" gesendet wird, lautet die Antwort: "Schließen Sie einen Doppelpunkt in die Auswahl ein, damit er Argumente von UserInfo abrufen kann" Finde heraus, was falsch ist.
Was Hinweis:
Die Parameter für die Funktion und die in durch NSTimer userinfo übergebenen Parameter DO übereinstimmen. Sie sind beide Arrays von Strings.
Wenn es irgendetwas bedeutet, schlägt der Code fehl, während sendMessage aufgerufen wird. Es macht es nicht wirklich zu sendMessage.
Ich bin eine seltsame Warnung immer sagen, dass „Stringliteral ist kein gültiger Ziel-c-Selektor“
ich meinen Code versuchte Wechsel für meinen nachrichts den Timer als Argument zu nehmen, wie ein Benutzer vorgeschlagen: func sendMessage(timer: NSTimer){
aber das gibt immer noch den gleichen Fehler.
Vielen Dank für Ihre Hilfe im Voraus, ich weiß es zu schätzen.
EDIT: Hier ist die Funktion, die Zeit läuft: // alle Daten speichern @IBAction func saveText (Sender: ANYOBJECT) {var Telefon: Double var aktiv: Int var Frequenz: Double var message: String var Datum: 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: genaue Fehler mssg:
unerkannt Selektor Instanz gesendet 0x7ffe6b915460 2016-07- 25 13: 26: 09,092 Harras Ihrer Kate [53524: 9000621] *** App beenden aufgrund nicht abgefangene Ausnahme 'NSInvalidArgumentException', Grund: ‚- [Harass_Your_Kate.AddMessageViewController nachrichts:]: Unbekannter Selektor an Instanz gesendet 0x7ffe6b915460
Da dies richtig ist, sollte es wahrscheinlich nicht downvoted werden, aber ich bin neugierig, warum. – BaseZen
Ich habe deine Antwort nicht abgelehnt, aber es hilft nicht beim Code. Ich habe genau das, was Sie und der andere Beantworter haben, aber es ändert den Fehler nicht. Es wird immer noch darauf hingewiesen, dass das Beenden der App aufgrund der nicht abgefangenen Ausnahme 'NSInvalidArgumentException', nicht erkannter Selektor an Instanz 0x13601f910 'gesendet wird. – Ryan
Wenn Swift3 Unterstreichung vor dem ersten Parameter der Methode hinzufügt –