простой тест NSTimer не работает

#objective-c

#objective-c

Вопрос:

Я узнал о NSTimer и после прочтения документов я сделал этот простой тест. Насколько я понимаю, когда я вызываю viewDidLoad в main, viewDidLoad должен затем вызвать runTest через 3,0 секунды — но это не работает. Он отлично компилируется без ошибок, но не загружает runTest (нет NSLog) пожалуйста, помогите… Спасибо.

 #import "MyClass.h"
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

MyClass *trial = [[MyClass alloc]init];

[trial viewDidLoad]; ///// this should call viewDidLoad /////

[pool drain];
return 0;
}



#import <Foundation/Foundation.h>

@interface MyClass : NSObject {

NSTimer *aTimer;}

@property (nonatomic, retain) NSTimer *aTimer;

- (void)viewDidLoad;

- (void)runTest;

@end





#import "MyClass.h"

@implementation MyClass

@synthesize aTimer;

- (void)viewDidLoad {
    aTimer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self     selector:@selector(runTest) userInfo:nil repeats:NO];}

- (void) runTest {
NSLog(@"Working - runTest has loaded !");
aTimer = nil;
}
@end
  

Комментарии:

1. Вы уверены, что вызываете viewDidLoad?

Ответ №1:

Так работать не будет. Для NSTimer требуется цикл выполнения, который будет создан автоматически при создании обычного приложения Cocoa, а не инструмента командной строки Foundation.

Создайте таймер в applicationDidFinishLaunching методе делегата приложения или в init вашем объекте, если вы создаете его экземпляр в главном интерфейсе.

Комментарии:

1. Вы хотите сказать, что NSTimer нельзя использовать ни в какой форме при создании небольших приложений только для консоли?? если да, то небольшой пример applicationDidFinishLaunching был бы отличным.

2. Просто создайте новое приложение Cocoa и перейдите к классу AppDelegate. Вы увидите - (void)applicationDidFinishLaunching:(NSNotification *)aNotification метод.