2016-06-02 2 views
-2

Я хочу, чтобы каждый раз называть мой сервер приложением на переднем плане. Этот вызов не должен зависеть от любого класса ViewController как общего метода.Звоните на сервер каждую минуту, пока приложение находится в Foreground

(например: вызов мой сервер зависит от ответа сервера я хочу показать некоторое предупреждение, как это обычно)

я просто держать пытающееся приложение метод делегата, но я не мог получить какое-либо решение. Есть ли какие-либо другие способы или какой-либо метод принадлежит делегату приложения?

+0

любой код был бы оценен. –

+0

Положить таймер, который запускает каждую минуту и ​​выполняет этот метод? – Stefan

+0

- (void) serverCallMethod {// мой код вызова для вызова} Я хочу звонить каждый мин, но не должен зависеть от какого-либо класса Vc –

ответ

-1

Tamil_Arya,

Вы не должны сбрасывать весь код в AppDelegate только потому, что это синглтон и через вне доступна: жизненного цикла приложения. Вложение всего в appdelegate сделает ваш код очень неуклюжим и будет следовать очень плохому шаблону дизайна.

Следующее MVC - одна хорошая вещь, которую вы можете сделать, чтобы ваш код был надежным и надежным.

Во всяком случае Вот что вы можете сделать,

Я считаю, что вы должны быть с singleton класс для создания веб-сервиса звонков. Если не создать его.

Для примера назовем класс как WebService.h и WebService.m

Так что ваш WebService.h должен выглядеть

@interface WebService : NSObject 
+ (instancetype)shared; //singleton provider method 
- (void)startSendPresence; //method you will call to hit your server at regular interval 
- (void)stopSendPresence //method you will call to stop hitting 
@end 

WebService.m должен выглядеть

@interface WebService() 
@property (strong, nonatomic) NSTimer *presenceTimer; 
@end 

@implementation WebService 

+ (instancetype)shared 
{ 
    static id instance_ = nil; 

    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     instance_ = [[self alloc] init]; 
    }); 

    return instance_; 
} 

- (void)startSendPresence { 

    [self sendPresence:nil]; //to make the first webservice call without waiting for timer to trigger 

    if(!self.presenceTimer){ 
     self.presenceTimer = [NSTimer scheduledTimerWithTimeInterval:self.presenceTimerInterval target:self selector:@selector(sendPresence:) userInfo:nil repeats:YES]; 
    } 
} 

- (void)sendPresence:(NSTimer *)timer { 
    //make your web service call here to hit server 
} 

- (void)stopSendPresence { 
    [self.presenceTimer invalidate]; 
    self.presenceTimer = nil; 
} 
@end 

Теперь ваш Webservice одноплодной класс, чтобы попасть в веб-сервер с регулярным интервалом, готов :) Теперь вызовите его там, где вы хотите, когда хотите начать атаку и вызвать stopSend Присутствие, когда вы хотите, чтобы остановить его :)

Предполагая, что вы хотите, чтобы начать удар сервера, как только приложения появляется на переднем плане всегда (хотя не имеет особого смысла для меня надеюсь, что это делает для вас)

В вашем AppDelegate .m

//this method will be called when you launch app 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [[WebService shared] startSendPresence]; 
} 

//this method will be called when you brimg it foreground from background 
- (void)applicationWillEnterForeground:(UIApplication *)application { 
    [[WebService shared] startSendPresence]; 
} 

Если вы хотите, чтобы остановить удары разъединить, как только приложение переходит в фоновый

- (void)applicationDidEnterBackground:(UIApplication *)application { 
    [[WebService shared] stopSendPresence]; 
} 

Надеется, что это помогает

+0

Идеальное решение Спасибо bro, ..... –

+0

@ tamil-arya: Вы всегда приветствуетесь приятелем :) –

+0

@ down-voter: Уход за eplain ??? «Идеальное решение», вы видите, что это ответ от OP. Если вы проголосовали просто за то, что вы, возможно, увидели вопрос, объясните, пожалуйста, –

Смежные вопросы