Я довольно новичок в блоках и target-c, и я пытаюсь написать свою первую категорию, используя обе. Моя идея состоит в том, чтобы создать категорию на NSTimer, которая получит блок в качестве параметра, и этот блок будет использоваться в вызове селектора. Прямо сейчас у меня есть это.
// NSTimer+Additions.h
#import <Foundation/Foundation.h>
typedef void (^VoidBlock)();
@interface NSTimer (NSTimer_Additions)
+ (NSTimer *)scheduleTimerWithTimeInterval:(NSTimeInterval)theSeconds repeats:(BOOL)repeats actions:(VoidBlock)actions;
@end
#import "NSTimer+Additions.h"
static VoidBlock _voidBlock;
@interface NSTimer (AdditionsPrivate) // Private stuff
- (void)theBlock;
@end
@implementation NSTimer (NSTimer_Additions)
+ (NSTimer *)scheduleTimerWithTimeInterval:(NSTimeInterval)theSeconds repeats:(BOOL)repeats actions:(VoidBlock)actions {
[_voidBlock release];
_voidBlock = [actions copy];
NSTimer* timer = [[NSTimer alloc] initWithFireDate:[NSDate date]
interval:theSeconds
target:self
selector:@selector(theBlock)
userInfo:nil
repeats:repeats];
[timer fire];
return [timer autorelease];
}
- (void)theBlock {
_voidBlock();
}
@end
Суть для кода: https://gist.github.com/1065235
Все компилируется нормально, но у меня следующая ошибка:
2011-07-05 14: 35: 47.068 TesteTimer [37716: 903] * Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «+ [NSTimer theBlock]: нераспознанный селектор отправлен в класс 0x7fff70bb0a18'
Как я могу заставить эту категорию работать?