2013-04-25 4 views
0

내 앱에서 특정 시간 (예 : 오전 12시)에 하루에 한 번 업데이트되는 라벨을 만들고 싶습니다. 네가 나를 도울 수 있다면 정말 감사 할께. 고마워.하루에 한 번 라벨을 업데이트하는 방법은 무엇입니까?

현재 내가 가지고있는 것이지만 앱이 12시와 1시 사이에 열리는 경우에만 작동합니다.

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"HH"]; 

NSString *stringDate = [formatter stringFromDate:[NSDate date]]; 

if ([stringDate isEqualToString:@"00"]) { 

NSLog(@"its working"); 


[self changeLabel]; 

} 

분명히 말해서 나는 하루에 한 번 레이블의 텍스트를 변경하려고합니다. 오전 12시와 같이 특정 시간에 레이블을 업데이트하고 각 새 날짜의 시작과 함께 업데이트합니다. 이 작업을 수행하는 몇 가지 방법을 시도했지만 원하는 결과를 얻지 못했습니다. 누구든지이 작업을 수행 할 수있는 방법을 알고 있다면 귀하의 의견에 감사드립니다.

+0

MacOS 또는 iOS 용입니까? –

+0

iOS, 특히 iPhone/iPod Touch – Dave123

+2

당신이 원하는 것은 무엇이든 나쁜 접근 방식으로 보이기 때문에 조금 더 원하는 것을 명확하게해야한다고 생각합니다. 당신이 원하는 것을 더 분명히한다면, 우리는 올바른 방향으로 당신을 더 잘 지적 할 수있을 것입니다. –

답변

-1

24 시간 이상 열린 앱이있는 사람이 있습니까? 어쨌든 지연 시간으로 86400의 NSTimer를 간단히 사용할 수 있습니다.

+0

그게 아니라 theyd는 24 시간 동안 앱을 엽니 다. 앱은 기기의 기본 시계를 기반으로 시간을 확인한 다음 새로운 날마다 타이머를 업데이트합니다. 사용자가 앱을 여는 데 걸리는 시간과 아무런 관련이 없음 – Dave123

+0

사용자가 앱을 죽이면 재설정 될 수 있기 때문에 86400 타이머를 사용하지 않는 것이 좋습니다. – Dave123

+0

오해보다. NSUserDefaults를 사용하고 마지막 업데이트 데이터를 설정하십시오. 응용 프로그램을 시작할 때 그 값을 확인하고 현재 시간 스탬프와 비교하여 원하는대로 재생하십시오. –

-1

앱을 시작하면 12:00:01 AM에 시작하는 타이머를 설정하고 라벨을 업데이트하십시오.

+0

하루 중 시간에 따라 발동하는 타이머를 설정하는 방법은 무엇입니까? – Dave123

+0

NSTimer * time = [[NSTimer alloc] initWithFireDate : <# (NSDate *) #> 간격 : <# (NSTimeInterval) #> 대상 : <#(id)#> 선택자 : <#(SEL)#> userInfo : <#(id)#> 반복 : <#(BOOL)#>]; –

+0

NSDate 매개 변수는 필요한 날짜 (시간 포함)이며 간격은 86400이고 대상 셀렉터는 호출 할 메서드입니다. 사용자 정보에서 레이블을 새로 고치고 반복을 위해 YES를 설정하십시오. –

1

응용 프로그램이 마지막으로 열려있는 시간을 확인하기 만하면 NSUserDefaults을 사용하여 날짜를 저장 한 다음 적절한 시간 (초) (86400 = 1 일)이 경과했는지 확인하십시오. 다음의 라인을 따라

뭔가 올바른 방향을 가리켜 야 :

//gather last time app was opened 
    NSDate *lastUpdated = [[NSUserDefaults standardUserDefaults] objectForKey:@"app_last_updated"]; 

    //check date is valid 
    if(lastUpdated) 
    { 
     //determine number of seconds that have passed 
     NSTimeInterval timeInterval = [lastUpdated timeIntervalSinceNow]; 

     //check time interval is greater than 1 day 
     if(timeInterval > 86400) 
     { 
      //update label 
     } 
    } 

    //save current time 
    [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:@"app_last_updated"]; 
+0

앱이 마지막으로 열렸을 때 반드시 확인하고 싶지는 않습니다. 특정 시간 (예 : 오전 12시)에 앱이 매일 라벨을 업데이트하도록하려고합니다. – Dave123

+0

코드에서 내가 날짜 포매터를 사용하여 게시 한 날짜가 오전 12시 이후인지 확인할 수 있습니다. 앱을 계속 실행하지 않는 한 앱이 마지막으로 열렸는지 확인하지 않고 라벨을 업데이트 할 수 없습니다. – CaptainRedmuff

0

그것은 당신이 수행 할 작업에 따라 달라집니다. iOS에서는 앱이 항상 포 그라운드에서 실행되지 않을 가능성이 큽니다. 그래서 응용 프로그램이 활성 상태 일 때 applicationDidBecomeActive: 레이블을 업데이트합니다. 그런 다음 원하는 특정 날짜/시간에 시작하는 타이머를 만듭니다. 예를 들어

:

NSDate *d = // create the next date/time 
updateTimer_ = [[NSTimer alloc] initWithFireDate: d 
          interval: 0 
          target: self 
          selector:@selector(updateLabel:) 
          userInfo:nil repeats:NO]; 

NSRunLoop *runner = [NSRunLoop currentRunLoop]; 
[runner addTimer:updateTimer_ forMode: NSDefaultRunLoopMode]; 
+1

앱이 백그라운드로 들어갈 때 타이머를 무효화하는 것을 잊지 마십시오. – sosborn

0

나는 이것이 이전 게시물입니다 알고 있지만 며칠 전 내가 Dave123 물어와 내가 웹에서 많이 검색 한 후이 솔루션을 함께했다 그냥 뭐 필요 :

- (void)applicationDidBecomeActive:(UIApplication *)application { 

    NSLog(@"applicationDidBecomeActive"); 

    self.masterviewController = [[PBMasterViewController alloc] init]; 

    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 

    NSLog(@"Seconds --------> %.f",[[NSDate date] timeIntervalSinceDate:[[NSUserDefaults standardUserDefaults] objectForKey:@"OLD_DATE"]]); 
    NSLog(@"old date: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"OLD_DATE"]); 

    // 24 hours must elapse between each update check 
    if ([[NSDate date] timeIntervalSinceDate:[[NSUserDefaults standardUserDefaults] objectForKey:@"OLD_DATE"]] > 86400) { 

     NSLog(@"Time elapsed since last update is MORE than 1 day. Check for updates."); 
     [self.masterviewController checkForUpdates]; 

    } else { 

     NSLog(@"Time elapsed since last update is LESS than 1 day. Don't check for updates."); 

    } 

    // Here I convert the seconds into hours with two decimals, if you want to show the time elapsed in a UILabel 
    NSString *stringCheckInterval = [NSString stringWithFormat:@"%.02f hours since last update", [[NSDate date] timeIntervalSinceDate:[[NSUserDefaults standardUserDefaults] objectForKey:@"OLD_DATE"]]/60/60]; 
    NSLog(@"%@", stringCheckInterval); 


} 
관련 문제