2016-06-04 20 views
0

Ich habe eine Chat-App, die einen Uiswitch hat. Wenn der Schalter aktiviert ist, möchte ich, dass die App alle 3 Sekunden kontinuierlich "hi" sendet, auch wenn die App im Hintergrundmodus ist. Ich weiß, dass ich NSTimer verwenden kann, aber ich weiß nicht wirklich, wie man das in diesem Code implementiert (Dies ist meine erste Zeit, um iOS App zu entwickeln). Bitte hilf mir dabei.iOS UISwitch weiter alle 4 Sekunden Nachricht senden

Mein Code ist:

// Allocate, initialize, and add the automatic button. 
_AutomaticSend = [[UISwitch alloc] initWithFrame:CGRectMake([self width] - 50.0, textAreaY + Center(160.0, textAreaHeight), 50.0, 50.0)]; 
[_AutomaticSend addTarget:self action:@selector(changeSwitch:) forControlEvents:UIControlEventValueChanged]; 

und

// Switch action 
//NSUInteger counter = 0; 

- (void)changeSwitch:(id)sender{ 

    if([sender isOn]){ 
     for (int a=1; a<=300; a++) 
     { 
      //[self performSelector:@selector(changeSwitch:) withObject:_textField afterDelay:70.0]; 
      [sender setOn:YES animated:YES]; 
      [_textField setText:@"hi"]; 
      NSString * text = [_textField text]; 

      // Update status. 

      [[TSNAppContext singleton] updateStatus:text]; 

      // Add the status to the bubble. 
      [self appendLocalPeerTableViewCellWithMessage:text]; 

     } 


     // NSLog(@"Switch is ON"); 
    } else{ 
     NSLog(@"Switch is OFF"); 
    } 

} 

nun die App zeigt alle "hallo", nachdem alle 300 "hallo" ist bereit zu zeigen. Aber ich möchte, dass es eins nach dem anderen kontinuierlich sendet.

+0

Ihre Funktion aufrufen, jede 3 Sekunden, als Sie Nachricht bekommen in jeder 3 Sekunden – iOS

+0

Gibt es eine Möglichkeit, meine Funktion alle 3 Sekunden automatisch anzurufen? – user3284302

+0

Verwenden Sie 'NStimer' rufen Sie Ihre Methode alle 4 Sekunden auf – Bittoo

Antwort

0

Verwenden NSTimer: Documentation of NSTimer

Deklarieren Eigenschaft NSTimer in .h file:

@property (retain,nonatomic) NSTimer *myTimer; 

- (void)changeSwitch:(id)sender 
{ 
    if([sender isOn]){ 
    myTimer = [NSTimer scheduledTimerWithTimeInterval: 4 target: self 
            selector: @selector(AddMessage:) userInfo: nil repeats: YES]; 

    } else{ 
    [self.timer invalidate]; 
    } 
} 

Nach jedem 4 Sekunden, Timer schaltet den unten Funktionsaufruf:

-(void) AddMessage:(NSTimer*) timer 
{ 
    //Add Message 
} 
1
  1. definieren eine NSTimer Instanz und eine Gegenkraft r in Ihrer View-Controller:

    @property (nonatomic, strong) NSTimer *timer; 
    @property (nonatomic, assign) NSInteger counter; 
    
  2. Implementieren Sie die Methode, wenn der Timer ausgelöst wird:

    - (void)timerAction:(id)sender { 
        [_textField setText:@"hi"]; 
        NSString * text = [_textField text]; 
    
        // Update status. 
    
        [[TSNAppContext singleton] updateStatus:text]; 
    
        // Add the status to the bubble. 
        [self appendLocalPeerTableViewCellWithMessage:text]; 
    
        // stop the timer after sending for 300 times 
        self.counter += 1; 
        if (self.counter >= 300) { 
         [self.timer invalidate]; 
         self.timer = nil; 
        } 
    } 
    
  3. Startet den Timer, wenn der Schalter eingeschaltet ist:

    - (void)changeSwitch:(id)sender{ 
        if ([sender isOn]) { 
         self.counter = 0; 
         self.timer = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES]; 
        } else { 
         // kill the timer when switch is off 
         [self.timer invalidate]; 
         self.timer = nil; 
        } 
    } 
    

jedoch Sie können den Timer nicht mehr unbegrenzt weiterarbeiten lassen, nachdem Ihre App den Hintergrund betreten hat (mit einigen Ausnahmen ons: VoIP, GPS-Anwendungen usw.). Bitte beachten Sie das offizielle Dokument Background Execution.

0
//Nstimer *timer in .h 

In Ihrem UISwitch Methode schreiben wie diese

- (void)changeSwitch:(id)sender{ 

if([sender isOn]){ 
timer=[NSTimer scheduledTimerWithTimeInterval:2.0 
target:self 
selector:@selector(targetMethod) 
userInfo:nil 
repeats:NO]; 
} 
else 
{ 
    [timer invalidate]; 
} 
} 

Targetmethod Gefällt Ihnen dieses

-(void)targetMethod 
{ 
[sender setOn:YES animated:YES]; 
[_textField setText:@"hi"]; 
NSString * text = [_textField text]; 

// Update status. 

[[TSNAppContext singleton] updateStatus:text]; 

// Add the status to the bubble. 
[self appendLocalPeerTableViewCellWithMessage:text]; 

}