2016-07-19 23 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很高興認識一個男人!謝謝,我會編輯這個! –