• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> 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 :)
 

ecco55

Tokyo Rose
Registriert
26.10.14
Beiträge
71
Ganz schnell und einfach. Nachdem du das Objekt erzeugst hast musst du angeben:
Code:
 activeTests.delegate = self
Damit sollte es gehen. Gruß, Daniel
 

loha*

Alkmene
Registriert
24.01.10
Beiträge
32
Sry , daran hab ich natürlich gedacht nur im Code schnippsel vergessen ...

Sonst noch vorschläge ? Gruß
 

KALLT

deaktivierter Benutzer
Registriert
12.11.08
Beiträge
1.523
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?
 

loha*

Alkmene
Registriert
24.01.10
Beiträge
32
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:

loha*

Alkmene
Registriert
24.01.10
Beiträge
32
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