Я пытаюсь создать каркас для всех пользовательских объектов и представлений, которые я создавал и часто использую, путем создания пользовательских классов делегатов и пользовательских объектов. Все прошло хорошо, за исключением попытки заставить 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». Так что я думаю, что когда я устанавливаю делегата для этого таймера, он фактически устанавливает его в другое значение. Есть идеи?