2014-09-19 1 views
0

Я хотел вызвать метод, если таймер истек, но метод не вызван. Не уверен, что происходит не так. Какие-либо предложения?iOS - проблема с вызовом таймера

Называние:

- (void)messageSendingReply:(id)messageID 
{ 
    //Do something. 
} 

Вызов выше:

- (void)sendingMessageTimer_Start:(int64_t)sendingMsgID Time:(NSTimeInterval)replyDelay { 

    NSMethodSignature *sig = [self methodSignatureForSelector:@selector(messageSendingReply:)]; 


    if (sig) 
    { 

     NSInvocation* invo = [NSInvocation invocationWithMethodSignature:sig]; 
     [invo setTarget:self]; 
     [invo setSelector:@selector(messageSendingReply:)]; 
     id obj= [NSNumber numberWithLongLong:sendingMsgID]; 
     [invo setArgument:&obj atIndex:0]; 
     [invo retainArguments]; 

     [self.replyTimerDic setValue:[NSTimer scheduledTimerWithTimeInterval:replyDelay invocation:invo repeats:NO] forKey:[NSString stringWithFormat:@"%qi",sendingMsgID]]; 

    } 

} 
+1

Вы добавляете таймер в цикл запуска? –

ответ

1

Я решил, добавив таймер на текущем цикле выполнения и запуска. Благодарю.

if (sig) 
{ 
    NSInvocation* invo = [NSInvocation invocationWithMethodSignature:sig]; 
    [invo setTarget:self]; 
    [invo setSelector:@selector(messageSendingReply:)]; 
    id obj= [NSNumber numberWithLongLong:sendingMsgID]; 
    [invo setArgument:&obj atIndex:0]; 
    [invo retainArguments]; 

    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:replyDelay invocation:invo repeats:NO]; 

    [self.replyTimerDic setValue:timer forKey:[NSString stringWithFormat:@"%qi",sendingMsgID]]; 

    NSRunLoop* runLoop = [NSRunLoop currentRunLoop]; 
    [runLoop addTimer:timer forMode:NSRunLoopCommonModes]; 
    [runLoop run]; 
}