2010-11-10 36 views
0

即使我的應用程序未在當時打開,我希望文本每天更改一次NSTimer在您的應用程序關閉時不會運行,如果我的應用程序關閉,applicationSignificantTimeChange也不會收到消息。不是NSTimer或applicationSignificantTimeChange,那我該用什麼?

我需要做的是。

(1)獲取當前日期 (2)選擇基於當前的日期和 (3)更新標籤

我仍然可以使用NSTimerapplicationSignificantTimeChange需要處理的話一語在我的應用程序在午夜開放,但我需要得到的短語採摘方法首先工作,以便我的計時器或時間更改方法可以在午夜爲新的日期打電話

任何人都可以幫我解決這個問題,我需要什麼要做到這一點?

+2

在關閉應用程序時,不應該更新顯示元素。爲什麼不等到它被打開,檢查當前時間,並相應地設置標籤? – Justin 2010-11-10 21:22:16

+0

我需要一句話來改變每一天。如果我說每天午夜需要改變一個短語,那麼應用程序是否有更新?如果用戶錯過了幾個晚上,我需要它跳到正確的短語。 – BasicApp 2010-11-10 21:30:38

+0

想想你如何寫一個網站來做同樣的事情。我懷疑你保持一個進程只是每12小時更新一次字符串。相反,您可能會根據當前日期和時間確定正確的短語。 – Justin 2010-11-10 21:32:32

回答

0

如果應用程序未運行,則不能。

但是,您可以使用「本地通知」 - 有點像「推送通知」 - 除非它是由您自己的設備發送的 - 告訴您應用程序需要注意。這可以安排。

http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Introduction/Introduction.html

+0

當應用程序關閉時,本地通知無法觸發處理。這需要用戶採取行動。 – Justin 2010-11-10 21:27:40

+0

如果通知無法正常工作,那麼應用程序會自行更新它嗎?假設我想每天晚上在午夜改變一個短語,並且用戶在未激活應用程序的情況下錯過了幾天。應用程序可以跳到當天適當的短語嗎? – BasicApp 2010-11-10 21:31:35

4

我希望這個代碼是不夠好,停止一切你所問的方式過於頻繁類似的問題。
是的,對未來的教訓:在我感興趣的類別中遇到很多問題,並且我將提供代碼。

- (void)updateLabelForDate:(NSDate *)date { 
    NSTimeInterval timeInterval = [date timeIntervalSinceReferenceDate]; 
    NSInteger days = timeInterval/(60*60*24); 
    NSArray *sloganArray = [NSArray arrayWithObjects: 
          NSLocalizedString(@"Slogan for day 1", nil), 
          NSLocalizedString(@"Slogan for day 2", nil), 
          NSLocalizedString(@"Slogan for day 3", nil), 
          NSLocalizedString(@"I'll hope you'll get it", nil), 
          nil]; 
    NSInteger usedSloganIndex = (int)days % [sloganArray count]; 
    NSString *slogan = [sloganArray objectAtIndex:usedSloganIndex]; 
    NSLog(@"Slogan: %@", slogan); 
} 

- (void)applicationSignificantTimeChange:(UIApplication *)application { 
    [self updateLabelForDate:[NSDate date]]; 
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
    [self.window addSubview:viewController.view]; 
    [self.window makeKeyAndVisible]; 
    [self updateLabelForDate:[NSDate date]]; 
    // the following is there to prove that this code works. 
    NSDate *date = [NSDate date]; 
    for (int i = 0; i < 10; i++) { 
     NSLog(@"Date: %@", date); 
     [self updateLabelForDate:date]; 
     date = [date dateByAddingTimeInterval:(60*60*24)]; 
    } 
    return YES; 
} 

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    [self updateLabelForDate:[NSDate date]]; 
} 
+1

-1爲態度。 +2的態度。 – Justin 2010-11-10 22:02:42

+0

我將哪些文件放入.h文件並進入.m文件?我該如何將它連接到界面上的標籤?很抱歉,我對此感到煩惱。這是我需要的最後一部分,我完成了。 – BasicApp 2010-11-10 22:43:41

+1

冒着被無禮的風險,你有兩種選擇:要麼有人爲你寫一個完整的應用程序,要麼研究如何編寫應用程序併發布特定的技術問題。這種要求零碎的做法不會幫助任何一方。 – Justin 2010-11-10 22:58:14

相關問題