• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Lebenszeit, Delegate Pattern macht Probleme

loha*

Alkmene
Registriert
24.01.10
Beiträge
32
Hallo ich habe eine kleine App die über verschiedene View Controller verfügt .
In dem root View wird ein Object erzeugt , eine Methode von diesem Object wird über das Delegate Pattern von einem anderen View gefeiert. Nur leider findet der Aufruf nicht statt ich denke das Object ist dann schon aus dem Speicher gelöscht. Wie kann ich es im Speicher behalten ?
Code:
class RootViewController: UIViewController, NRFManagerDelegate, streamDelegate{
......
    let activeTests = ActiveTestViewController()
func requestData(data: [UInt8]){
        let nsData = NSData(bytes: data, length: data.count)
        if nrfManager.writeData(nsData) {
            print("send stream")
            requestStream = nsData
            communicationtimer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: #selector(timeoutForRequest), userInfo: nil, repeats: true)
        }else {print("send error")}
    }
   
......

Code:
protocol streamDelegate{
    func requestData(data: [UInt8])
}

class ActiveTestViewController: UIViewController{
   var delegate : streamDelegate?

@IBAction func exhaustValveTest(sender: AnyObject) {
        print("exhaustValveTest")
        let stream = request.DeviceTest(requestTyps.DFFI2.testMode.ExhaustValve)
        delegate?.requestData(stream)
    }
.....

Schon mal denke :)
 
Ganz schnell und einfach. Nachdem du das Objekt erzeugst hast musst du angeben:
Code:
 activeTests.delegate = self
Damit sollte es gehen. Gruß, Daniel
 
Sry , daran hab ich natürlich gedacht nur im Code schnippsel vergessen ...

Sonst noch vorschläge ? Gruß
 
Wenn beide Objekte auf einander verweisen, dürfte das eigentlich nicht passieren. Wo genau instanzierst du denn die Variable
activeTests und wann wird deren delegate-Eigenschaft gesetzt?

Hast du schon versucht um mit deinit() herauszufinden ob und wann die Instanzen gelöscht werden?
 
activeTests wird im Rootviewcontroller zugewiesen , das delegate wird in viewdidload gesetzt .
Komisch komisch, "deinit" wird im RootviewController gar nicht aufgerufen daher muss das object noch am leben sein. Jetzt stellt sich die Frage was hier trotzdem schief läuft ....
 
Zuletzt bearbeitet:
Ich bin mir gerade nicht sicher , aber kann es daran liegen das ich von einem in den anderen View peer Button spring über Segues show