#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
метод.