我有一个单例类,我想在后台运行并检查要上传的照片。单例通过
从另一个viewcontroller初始化[[EXOImageUploader sharedPhotoUploader] startPhotoUploadCheck];
如果我NSLog一切,看起来单身人士正在工作。我可以在单身中做其他事情,下面没有显示就好了。 NSTimer
永远不会发射。我甚至注释掉了检查计时器isValid
但是也不起作用的行。
有关我的定时器工作原理的任何想法?
以下是NSLog吐出的顺序。
以下是代码。
·H
@interface EXOImageUploader : NSObject
@property (assign) NSTimeInterval timerCheckInterval;
+ (EXOImageUploader *) sharedPhotoUploader;
- (void) startPhotoUploadCheck;
- (void) stopPhotoUploadCheck;
的.m
@interface EXOImageUploader ()
@property (nonatomic, strong) NSTimer* timerUpload;
@end
@implementation EXOImageUploader
static EXOImageUploader* _sharedPhotoUploader;
#pragma mark - SINGLETON SETUP
+ (EXOImageUploader *) sharedPhotoUploader {
static EXOImageUploader *sharedPhotoUploader = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedPhotoUploader = [[self alloc] init];
NSLog(@"sharedPhotoUploader singleton");
});
return sharedPhotoUploader;
}
- (id) init {
if (self = [super init]){
NSLog(@"sharedPhotoUploader init");
[self doSetup];
}
return self;
}
- (void) doSetup {
NSLog(@"doSetup");
if (!self.timerCheckInterval) {
self.timerCheckInterval = 1.0f;
}
NSLog(@"Timer interval: %f", self.timerCheckInterval);
}
#pragma mark Public Methods
- (void) startPhotoUploadCheck {
NSLog(@"startPhotoUploadCheck");
//Don't start a new one if this one is running
if (!_timerUpload) {
_timerUpload = [NSTimer timerWithTimeInterval:_timerCheckInterval target:self selector:@selector(checkForPhotosToUpload) userInfo:nil repeats:YES];
}
}
- (void) stopPhotoUploadCheck {
NSLog(@"stopPhotoUploadCheck");
[_timerUpload invalidate];
_timerUpload = nil;
}
答案 0 :(得分:1)
使用scheduledTimerWithTimeInterval
代替timerWithTimeInterval
。
timerWithTimeInterval
的文档说:“您必须使用addTimer:forMode:”将新计时器添加到运行循环中。“
使用“预定”版本,已经为您完成了。
答案 1 :(得分:0)
你试图使用你的计时器而不是初始化它,因此它将是零并且不会被激活。像这样激活您的计时器:
[timerUpload scheduledTimerWithTimeInterval:2.0
target:self
selector:@selector(targetMethod:)
userInfo:nil
repeats:NO];