NSTimer Nicht Zu Stoppen, Wenn Ungültig

Ich habe folgenden code in meiner .h-Datei:

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import <AVFoundation/AVFoundation.h>
#import <MapKit/MapKit.h>

@interface LandingController : UIViewController<CLLocationManagerDelegate> {
    CLLocationManager *LocationManager;
    AVAudioPlayer *audioPlayer;

}

@property (nonatomic, retain) NSTimer *messageTimer;

- (IBAction)LoginButton:(id)sender;

@end

Ich habe folgenden code in meiner .m-Datei:

@interface LandingController ()

@end

@implementation LandingController
@synthesize messageTimer;

- (void)checkForMessages
{

    UIAlertView *alert = [[UIAlertView alloc]
                          initWithTitle:@"BINGO:"
                          message:@"Bingo This Works"
                          delegate:nil
                          cancelButtonTitle:@"Okay"
                          otherButtonTitles:nil];

    [alert show];

}

- (IBAction)LoginButton:(id)sender {

    if ([UserType isEqualToString:@"Owner"]) {

        if (messageTimer){ 
        [self.messageTimer invalidate];
        self.messageTimer = nil;
        }

    } else {

        if (!messageTimer){

           self.messageTimer = [NSTimer scheduledTimerWithTimeInterval:10.0
                                                             target:self
                                    selector:@selector(checkForMessages)
                                                           userInfo:nil
                                                            repeats:YES];


        }
    }

}

@end

Aber mein timer nicht wollen, zu stoppen, wenn ich den Anruf entkräften.

Den LoginButton ist nur zweimal hintereinander gedrückt, einmal, wenn die strResult ist = auf "Guard" und dann die Anwendung änderungen, die es zu gleich "Besitzer" und der Benutzer drückt die Schaltfläche "login" wieder, so dass ich nicht denke, ich werde mehrere Timer.

Nach drücken der Schaltfläche "login", und starten Sie die timer-I übergang zu einer anderen Ansicht und dann Wechsel zurück zu drücken Sie die Schaltfläche "login" einmal mehr die ist, wenn ich will, den timer zu stoppen. Muss ich etwas besonderes tun, um die messageTimer da ich umgestiegen Blick für einen moment und kam dann zurück?

Irgendwelche Ideen?

Dank!

  • Wo hast du geschrieben scheduledTimerWithTimeInterval code ? Check das, es muss immer initialisiert, auch wenn Sie ungültig es.
  • Ich habe es geschrieben, innerhalb einer if-Schleife, die nur einmal in der Anwendung, so dass ich nicht denke, es wird re-initialisiert.
  • Ich habe in mehrere code - siehe oben
  • Könnten Sie überprüfen, ob der Wert von [self.messageTimer isValid] NICHT, bevor Sie selbst.messageTimer zu null?
  • Gerade Hinzugefügt mehr code, so etwas wie, dass?
  • Nach dem hinzufügen in diesem code hat es jetzt aber die Kugel trifft den code ungültig. Wenn nach der Einstellung des Timers durch drücken der I-Taste Reihenfolge zu einer anderen Ansicht und dann Wechsel zurück zu dieser Ansicht, und drücken Sie die Taste erneut, benötige ich die messageTimer Wert einen anderen Weg?
  • Könnten Sie fügen Sie diesen code in Ihre viewController: -(void)dealloc {[self.messageTimer invalidate]; self.messageTimer = null;} und sehen, ob es hilft?
  • Was soll das bringen?
  • Es wird, erlischt die timer, wenn Sie Ihren viewController freigegeben wird. Ich möchte nur sicherstellen, dass es nicht ein timer-Leck.
  • Ich habe es, aber es schien nicht, etwas zu ändern.

InformationsquelleAutor NCoder | 2013-05-10
Schreibe einen Kommentar