Я добавил себя. но проблема сохраняется

даю и увольняюNSTimer с участием:

ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                           target:self
                                         selector:@selector(handleTimer:)
                                         userInfo:nil
                                          repeats:YES];
[ncTimer fire];

А ТАКЖЕ

- (void)handleTimer:(NSTimer *)chkTimer {
    // do stuff
}

Я сохраняю свой таймер с:

@property (nonatomic, retain) NSTimer *ncTimer;

По какой-то причине таймер не повторяется. Стреляет только один раз, а потом никогда.

 Zigglzworth23 янв. 2011 г., 12:46
Нет, я не .. единственное, что я должен добавить, это то, что я запускаю таймер в методе viewDidLoad
 John Parker23 янв. 2011 г., 12:36
Глупый вопрос с моей стороны, но лучше быть уверенным: Я полагаю, вы не делаете недействительным таймер где-нибудь внутри метода handleTimer?

Ответы на вопрос(5)

Решение Вопроса

который вы указали в качестве свойства в заголовке. Это должно работать:

self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0<br> target:self selector:@selector(handleTimer:) userInfo:nil repeats: YES];

Также: метод огня запускает таймер вне цикла. Если таймер не повторяется, он становится недействительным. После строки, которая говорит огонь, добавьте это:


BOOL timerState = [ncTimer isValid];
NSLog(@"Timer Validity is: %@", [email protected]"YES":@"NO");
 Zigglzworth23 янв. 2011 г., 13:32
Да, я понял ... Я делал это во многих других приложениях, и он работал нормально, поэтому я не могу понять, что здесь не так
 Zigglzworth23 янв. 2011 г., 13:38
Хорошо, я нашел проблему. Я запускал таймер в методе, вызываемом из другого класса в отдельном потоке, который не позволяет таймеру повторяться.
 Vaibhav Saran03 дек. 2013 г., 09:24
так как мы можем справиться с этим? Как может повторить NSTimer может работать из другого класса?
 Zigglzworth23 янв. 2011 г., 13:14
«Срок действия таймера: ДА», но все равно не повезло ... таймер не повторяется. В чем может быть проблема здесь?
 Aurum Aquila23 янв. 2011 г., 13:27
Я только что сделал небольшое тестовое приложение, чтобы увидеть, что произошло, и оно отлично сработало для меня. У вас есть @synthesize ncTimer в верхней части вашей реализации?

-fire: Метод запускает его вручную один раз. Чтобы таймер запускался и повторялся, вы должны добавить его в цикл запуска, используя[[NSRunLoop currentRunLoop] addTimer: forMode:]

 Benedict Cohen16 апр. 2012 г., 13:03
Это правильно, но проще использоватьNSTimer scheduleTimerWith... методы вместо добавления вручную в цикл выполнения.

ncTimer как у вас не будет инициировать свойстваretain функциональность.

Предполагая, что объявление находится внутри объекта-члена, вам нужно сделать:

self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(handleTimer:) userInfo:nil repeats:YES]
 Zigglzworth23 янв. 2011 г., 13:10
Я добавил себя. но проблема сохраняется

который вставляет создание таймера в основной поток.

Таким образом, код останется:

dispatch_async(dispatch_get_main_queue(), ^{
  self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
                 target:self selector:@selector(handleTimer:) userInfo:nil repeats: YES];
});

Добавление таймера кmainRunLoop сделал это работает

Ну вот:

Цель C:

self.ncTimer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(handleTimer:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

Swift:

var ncTimer = NSTimer(timeInterval: 2.0, target: self, selector: Selector("handleTimer"), userInfo: nil, repeats: true)
NSRunLoop.mainRunLoop().addTimer(ncTimer, forMode: NSDefaultRunLoopMode)
 Husam30 авг. 2016 г., 11:30
Я тоже, это работало для меня, ноscheduleTimerWithTimeInterval не
 Gudin24 апр. 2018 г., 18:05
В Свифт 4:RunLoop.main.add(timer, forMode: RunLoopMode.defaultRunLoopMode)
 Volomike22 июн. 2016 г., 07:06
Не будет ли цель C бытьNSTimer *ncTimer вместоself.ncTimer? Кроме того, вы не сказали быaddTimer:ncTimer вместоaddTimer:timer? Я имею право редактировать это, но я хотел, чтобы вы знали, что нужно сделать.

Ваш ответ на вопрос