2013-10-26 32 views
0

我有一個按鈕,它在按下時會創建一個對象thing。然後,它睡了十秒鐘,然後調用thing.go它得到像顯示應用程序狀態iOS

UIApplicationState state = [[UIApplication sharedApplication] applicationState]; 

應用狀態。然後下面this問題的回答和評論我檢查,如果應用程序是在後臺運行,如果是,它會顯示一個本地通知。

所以我按下按鈕後立即按Home鍵回到主屏幕(這種情況使應用程序在後臺)

不過,我可以告訴大家的是,if語句返回false,因此不執行內部的任何代碼(通過將NSLog放入if語句中)。

所以我的下一個思考過程是以某種方式使用NSLog(state)在控制檯中顯示日期。顯然我不能這樣做。

那麼如何顯示applicationState來解決我的問題?還是有另一種方法可以檢查該應用程序是否在該類的方法中的後臺運行?

這裏是go功能這就是所謂的IBAction內當按鈕被按下

-(void)go { 
    if (state == UIApplicationStateBackground) { 
     NSLog(@"App is in background"); 
    } 
} 

這裏是鏈接到該按鈕的IBAction,即,在按下按鈕時運行

- (IBAction)button_help { 
    myclass* thingy = [[myclass alloc] init]; 
    sleep(10); 
    thingy.go; 
} 
+0

僅爲您添加的代碼Zaph :) –

+4

僅供參考 - 使用屬性表示法調用方法的做法很糟糕,即使它有效。調用'go'方法:'[thingy go];'。 – rmaddy

+0

你不能只使用'applicationDidEnterBackground'方法去做你想做的事情嗎? https://developer.apple.com/library/ios/documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference。html#// apple_ref/occ/intfm/UIApplicationDelegate/applicationDidEnterBackground: – Popeye

回答

1

你應該幾乎不使用睡眠。忘記它存在。它鎖定了你的應用程序,沒有任何變化,包括轉換到後臺。

你想要做的是設置一個定時器10秒,然後調用thing.go。

但是,這通常會因定時器不在後臺運行而變得複雜。事實上,除非採取特殊措施,否則您的應用在後臺不會獲得任何處理器時間。你會被告知你正在進入背景,然後你接到的下一個電話就是重新回到前臺。

當您的應用程序收到一條消息說它正在發送到後臺時,它將需要進行系統調用以請求後臺處理時間。 (我不記得那個叫我頭頂的電話,現在沒有Xcode在運行)

蘋果改變了iOS 7中後臺處理的規則,但你說這是iOS 6,所以這些更改不適用。

+0

雖然我希望你可以更具體一些,但似乎有問題。 –

0

如果我理解正確,您正在檢查應用程序是從本地通知返回還是已經處於活動狀態?

if (state == UIApplicationStateActive) { 
    // do something 
    NSLog(@"application was active "); 
} else { 
    NSLog(@"sent from notification"); 
} 
+0

那是正確的,我檢查瞭如果應用程序是在BG。 –

+0

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html 查找應用程序didReceiveLocalNotification:和應用程序didFinishLaunchingWithOptions。 – Edward

+0

我確實看過。但這不是我所要求的。 –