2016-07-19 25 views
0

我有一个单例类,我想在后台运行并检查要上传的照片。单身人士从另一个视图控制器通过初始化NSTimer没有从Singleton类发射

[[EXOImageUploader sharedPhotoUploader] startPhotoUploadCheck]; 

如果我NSLog的一切,它似乎单身正在工作。我可以在下面没有显示的单身人士中做其他事情。 NSTimer只是永远不会开火。我甚至评论了检查计时器isValid但不起作用的线路。

任何想法为什么我的计时器工作?

这里是NSLog的吐出顺序。

  1. sharedPhotoUploader初始化
  2. doSetup
  3. 定时器间隔:1.000000
  4. sharedPhotoUploader单
  5. startPhotoUploadCheck

下面是代码。

.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

如果timerUpload是零,它不通过if块,所以你的计时器将永远保持零。您是否尝试将计时器声明为属性? –

+0

我做到了。请参阅修订后的问题。 –

+0

尝试给予float而不是NSTimeInterval。 –

回答

1

使用scheduledTimerWithTimeInterval而不是timerWithTimeInterval

timerWithTimeInterval的文档说:“您必须使用addTimer:forMode:”将新计时器添加到运行循环中。

随着“预定”版本,这已经为你做。

+0

啊!完善!那是票! –

0

您尝试使用您的计时器没有初始化它,因此这将是零,不会着火。激活你的计时器是这样的:

[timerUpload scheduledTimerWithTimeInterval:2.0 
    target:self 
    selector:@selector(targetMethod:) 
    userInfo:nil 
    repeats:NO]; 
+1

你不需要alloc/init。 'scheduledTimerWithTimeInterval'是一个返回新实例的类方法。 –

+0

@PhillipMills很高兴认识一个男人!谢谢,我会编辑这个! –