2010-07-02 87 views
1

我在CFPreferencesCopyAppValue中存儲用戶名。在iOS 3.1.3下,它按預期工作,但在iOS4中,它在應用程序打開時存儲它,但只要其關閉(使用多任務關閉功能),該變量不會被存儲,即在應用程序的重新啓動時它將爲null。CFPreferencesCopyAppValue無法在iOS 4下工作

我有一種感覺,它可能是多任務處理的問題,因爲應用程序被關閉的方式與在iOS 3中有點不同,因此不會保存在被關閉的應用程序上。

我不幸的是沒有使用SDK的最新版本,所以它可能會在以後的版本中修復,但我需要該應用程序在3.1.3和4.0下工作,這是SDK的最後一個版本3.1.3和4.0,而不需要進行多次安裝。因此,如果它固定在最終版本上,我想我必須進行多次安裝。

有關此事的任何提示都會被讚賞。

+0

注意,按HTTP: //developer.apple.com/iphone/checklist/所有新應用程序_和現有應用程序的更新_必須使用iPhone SDK 4構建。除非您正在開發內部分發應用程序,否則在tr要編寫適用於iOS 3.1.3的新代碼。 – 2010-07-02 04:36:14

+0

它對於特定的觀衆(我不會進入誰),但最有可能的是3.1.3設備使用它。它將使用iPhone 4.0 SDK進行構建,但是我沒有看到爲什麼如果它爲4.0構建並且正確編碼的大部分無法在3.0上運行的原因嗎?我使用這個版本的SDK的原因是我可以在同一個環境中定位3.1.3和4。 – Rudiger 2010-07-02 05:01:20

回答

1

如果您發佈了一些如何更新值的實際代碼,這可能會很有用。根據CFPreferencesCopyAppValue文檔:

請注意,從此函數返回的值是不可變的,即使您最近使用可變對象設置了該值。

Preferences Best Practices文檔指定您應該使用CFPreferencesSetAppValue來保存該值。

更新:我懷疑我的思念在方案中的東西,也許下面我的回答是你在做什麼,因爲你曾提到你當前的代碼工作3.1.3。

如果是這種情況,您可能需要指定保存該值的事件。這可能是因爲當你的應用程序關閉時你正在更新它,但是如果你沒有在你的plist中明確指定你不支持暫停,你的應用程序可能會被暫停。

UPDATE2:本CFPreferencesSetAppValue文件明確提到:

必須調用CFPreferencesAppSynchronize功能,以便您的更改保存到永久存儲

+0

我正在使用CFPreferencesSetAppValue在代碼中儘早設置值,並且在iOS 3和iOS 4中都可以稍後正確檢索它們。在應用程序關閉之前,該值設置爲CFPreferences並從中檢索。在iOS3中,它工作正常,在iOS4中它重置爲null。我沒有做任何事情時,應用程序關閉或暫停或什麼,但也許操作系統存儲項目,如CFPreferences閃存存儲在應用程序關閉,這不會發生在iOS4,因此爲什麼它的失敗,不知道 – Rudiger 2010-07-02 04:49:58

+0

謝謝,這似乎已經工作了。奇怪的是,雖然我沒有打電話,但在iOS3下它工作,而iOS4則沒有。認爲這是讓我困惑的事情 – Rudiger 2010-07-05 23:11:34

相關問題