Выбор делегата NSTimer - PullRequest
       13

Выбор делегата NSTimer

0 голосов
/ 15 февраля 2012

Я пытаюсь создать каркас для всех пользовательских объектов и представлений, которые я создавал и часто использую, путем создания пользовательских классов делегатов и пользовательских объектов. Все прошло хорошо, за исключением попытки заставить NSTimers вызвать правильный метод внутри класса делегата.

Вот базовая настройка.

-(void) startTimers {
    NSTimer *timer1 = [NSTimer timerWithTimeInterval:5 target:self selector:@selector(doSomething:) userInfo:nil repeats:YES];
    NSTimer *timer2 = [NSTimer timerWithTimeInterval:5 target:self selector:@selector(doSomethingElse:) userInfo:nil repeats:YES];
}

Я легко могу вызвать этот метод и все что угодно, но когда сработает это время, он не вызовет метод, который я определил как селектор. Я почти уверен, что это как-то связано со значением делегата и классом, который он создает в качестве делегата.

Обратите внимание, что файл, в который я пишу, является подклассом UIView, который настроен как делегат, использующий теги @protocol и все такое.

Что я должен установить в качестве цели при определении моих таймеров, чтобы они вызывали правильные методы.

EDIT:

Вот пример того, что я делаю:

ExampleView.h

#import <UIKit/UIKit.h>

@protocol ExampleViewDelegate;

@interface ExampleView : UIView {
    NSTimer *timer;
}
-(void) initWithStuff:(id)stuff andFrame:(CGRect)frame;
-(void) testTimer;
@end

@protocol ExampleViewDelegate

-(void) someDelegateFunction;
@end

ExampleView.m

#import "ExampleView.h"

@implementation ExampleView


-(id) initWithStuff:(id)stuff andFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(testTimer) userInfo:nil repeats:YES];
    return self;
}

-(void) testTimer {
    NSLog(@"Timer Fired");
}

@end

Если вы добавите этот пользовательский вид в viewcontroller, он никогда не вызовет эту функцию testTimer и напечатает «Timer Fired». Так что я думаю, что когда я устанавливаю делегата для этого таймера, он фактически устанавливает его в другое значение. Есть идеи?

1 Ответ

2 голосов
/ 15 февраля 2012
NSTimer *timer1 = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(doSomething:) userInfo:nil repeats:YES];

Обратите внимание, что метод называется «scheduleTimerWithTimeInterval»

...