Hallo, ich habe erst kürzlich mit der iOS Programmierung begonnen und ich bin nun am verzweifeln. Ich möchte gerne einen Timer (eigene Klasse definiert, da dieser Timer noch mehrere Methoden haben soll) auf mehren Views in einer Tab Bar Application haben. Das Problem ist ,dass wenn ich mit Observern arbeite, mir die App sofort abstürtzt.
Ich habe im Interface-Builder zwei Views erstellt und die enstsprechenden ViewController erzeugt. Das Programm funktioniert ohne Observer. Sobald ich jedoch die Observer hinzufüge, wird mir diese Fehlermeldung angezeigt
Hier nun der Code wie ich die Observer in den beiden ViewController erzeuge:
Alles anzeigen
Alles anzeigen
Ich hoffe einer von euch kann mir einen Tipp geben,wo mein Fehler ist.
P.S Falls viele grammatische Fehler in meinem Text sind, möchte ich mich für diese entschuldigen, komme aus Luxemburg
Würde mich auf eine positive Antwort von euch freuen
Viele Grüße
ringobigno
Ich habe im Interface-Builder zwei Views erstellt und die enstsprechenden ViewController erzeugt. Das Programm funktioniert ohne Observer. Sobald ich jedoch die Observer hinzufüge, wird mir diese Fehlermeldung angezeigt
Quellcode
- 2014-01-21 00:46:45.833 Spielzeit[12136:a0b] An instance 0x8c1ae00 of class Spielzeit was deallocated while key value observers were still registered with it.
- Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger.
- Here's the current observation info:
- <NSKeyValueObservationInfo 0x8c1d2b0> (
- <NSKeyValueObservance 0x8c204a0: Observer: 0x89789a0, Key path: timerwert, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x8c0f710>)
- 2014-01-21 00:46:45.842 Spielzeit[12136:a0b] *** Terminating app due to uncaught exception 'NSRangeException', reason: 'Cannot remove an observer <SecondViewController 0x89789a0> for the key path "timerwert" from <Spielzeit 0x8973470> because it is not registered as an observer.'
Hier nun der Code wie ich die Observer in den beiden ViewController erzeuge:
Quellcode
- SecondViewController
- -(void)viewWillAppear:(BOOL)animated
- {
- [super viewDidAppear:animated];
- //Hier wird der Observer angemeldet.
- [spielZeit addObserver:self forKeyPath:@"timerwert" options:NSKeyValueObservingOptionNew context:NULL];
- _spielzeitAnzeige.text=[spielZeit formatiereAusgabe];
- }
- -(void)viewWillDisappear:(BOOL)animated
- {
- [spielZeit stoppeSpielzeit];
- //Hier wird er wieder abgemeldet.
- [spielZeit removeObserver:self forKeyPath:@"timerwert" context:NULL];
- [super viewWillDisappear:animated];
- }
Quellcode
- ThridViewController
- -(void)viewWillAppear:(BOOL)animated
- {
- [super viewDidAppear:animated];
- //Hier wird der Observer angemeldet.
- [spielZeit addObserver:self forKeyPath:@"timerwert" options:NSKeyValueObservingOptionNew context:NULL];
- _spielzeitAnzeige.text=[spielZeit formatiereAusgabe];
- }
- -(void)viewWillDisappear:(BOOL)animated
- {
- [spielZeit stoppeSpielzeit];
- //Hier wird er wieder abgemeldet.
- [spielZeit removeObserver:self forKeyPath:@"timerwert" context:NULL];
- [super viewWillDisappear:animated];
- }
Ich hoffe einer von euch kann mir einen Tipp geben,wo mein Fehler ist.
P.S Falls viele grammatische Fehler in meinem Text sind, möchte ich mich für diese entschuldigen, komme aus Luxemburg
Würde mich auf eine positive Antwort von euch freuen
Viele Grüße
ringobigno