2014-02-26 64 views
2

我有了2次iOS應用:是什麼導致iOS應用程序重新啓動?試圖堅持國家

  1. 一個頁面,讓你把一個URL
  2. 時加載的網址,提供基本的瀏覽功能,如返回頁面,轉發和刷新。

我希望瀏覽器記住它的部分2狀態,而不必從步驟重新輸入地址1.

我注意到,如果我打的回家按鈕,然後返回到應用程序,它會顯示網頁視圖(如果我已經放入地址)。

但經過一段時間後,我嘗試啓動應用程序,它回到第一個初始視圖。

我該怎麼做才能保留狀態,以便它不會返回到登錄狀態,或者這無法控制?

回答

1

一旦某個應用中背景,它是在操作系統的自由裁量權(即蘋果),以確定多長時間保持應用程序周圍的重新分配內存和應用程序被終止之前。這種行爲是爲了提高性能,預留電池壽命,除非在某些情況下(如應用程序與藍牙設備通信),否則不應被繞過。

有幾種技術如果應用程序是從後臺關閉保留狀態。

隨着NSUserDefaults,您的應用程序獲取一個可存儲字符串/數字/網址/等跨應用程序啓動持續的數據庫。它們甚至可以在雲中同步到用戶擁有的其他設備。

緩存是另一種選擇。在本地存儲檢索到的用戶加載的頁面內容可能是你想要的。在這種情況下,請看file system programming guide

如果你試圖做更復雜的東西,像堅持一個會話。您可以通過抓取的登錄回調返回的會話cookie配置,或NSHTTPCookieStorage

+0

謝謝我會給NSHTTPCookieStorage一槍。 –

1

我認爲做你提議的最好的方法是將URL存儲在NSUserDefaults中。這是一本持久的字典,但要記住,它只能用於小塊數據。我知道這可能不是你要找的精確解,而如果你想實現更復雜的行爲是在應用程序啓動時加載值的數據庫將是合適的

+0

我其實已經做到這一點,我只是簡化我的例子。我將URL保存在NSUserDefaults中,當它重新加載時,將它們發送到url ..但是它們需要再次登錄,因爲它使用php會話。 Safari如何做到這一點? –

1

有時候,iOS設備會選擇殺你的應用程序當它需要釋放一些內存時。您可以通過您的應用程序的輕量級越好,通過釋放盡可能多的內存,你可以去到後臺時減輕這種。

爲了解決您的問題,您應該在進入後臺時讓應用程序保存其當前狀態(很可能在NSUserDefaults中,甚至在某些情況下保存在覈心數據中),並在執行時恢復它重新啓動。

例如,只要到達「步驟2」(例如,viewController的-viewDidLoad),就可以將您的URL保存在NSUserDefaults中。當應用程序被重新啓動,你檢查用戶默認值,如果你發現存儲的URL,就可以立即推視圖控制器的「第2步」(這應該在-applicationDidFinishLaunchingWithOptions:做在你的應用程序代理)。

一些示例代碼:

# AppDelegate.m 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    ... 
    NSString *url = [[NSUserDefaults standardUserDefaults] objectForKey:@"YourAppURL"]; 
    if (url) { 
     // Jump directly to step 2 
    } else { 
     // Start your normal flow 
    } 
    ... 
} 

# ViewControllerStep2.m 
- (void)viewDidLoad { 
    ... 
    [[NSUserDefaults standardUserDefaults] setObject:self.url forKey:@"YourAppURL"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    ... 
} 

當然有可能(並且可能應該)是一些額外的邏輯,將默認刪除的網址時,不再需要。對於保持潛在的PHP會話活動,如果您有對Web服務的控制權,您應該讓它返回一個「非會話」cookie(即將來有一個真實的截止日期)以保持身份驗證,即使在瀏覽器(或者你的應用程序)被關閉。

這樣,cookie處理系統自動進行保存和重用你的cookies的照顧。這是一種「記住我」的功能。

如果這是不可能的,你應該手工保存和恢復從服務器返回的PHPSESSID餅乾(以類似的方式,我上面的URL的建議)。這需要您編寫一些代碼來與NSHTTPCookieStorage進行交互。請記住,這樣做時,服務器將仍然垃圾一定的時間後,收集您的會話,所以你可能會被要求再次登錄。

相關問題