2016-08-10 66 views
0

我有一個應用程序在iOS 9上運行,並且我爲X10 8 beta 4創建了iOS 10的新版本,現在當我從以前的版本升級應用程序時iOS 9)升級到新版本(iOS 10)...iOS NSUserDefaults無法正常工作如果將應用程序從ios 9升級到ios 10

在iPhone上安裝帶有Xcode 7的以前版本(使用ios 9或10),然後殺死該應用並使用Xcode 8安裝新版本測試版4在同一臺設備上將升級視爲新安裝,因此所有NSUserDefaults保存的值都會返回零!

我測試了一個示例應用程序,並按照NSUserDefaults這種情況沒有問題,因爲我使用[NSUserDefaults standardUserDefaults]來保存和檢索值,但在以下使用共享容器保存數據時遇到問題的實現中,I相信「權利集團」造成的問題!

SDK 10可能無法識別SDK 9以前創建的共享容器!這有什麼想法嗎?問題是我無法通過替換[NSUserDefaults standardUserDefaults]來代替[NSUserDefaults standardUserDefaults]修復代碼,而不是使用entitlementGroup,因爲當前使用應用程序的先前版本的用戶以及對新版本的任何更改都不能解決問題,因爲它需要在兩個版本中進行修復。

下面是代碼的主要部分(由之前的開發者編寫):

@implementation AppDelegate 

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) { 

    // background launch 

} else { 

    //foreground launch 

    [self setupForForegroundLaunch:application option:launchOptions]; 

    [[TrackingManager sharedTrackingManager] setIsBackground:NO]; 

} 

} 

@end 
+1

你有Xcode 8的新模擬iOS 10設備,所以當你在這些設備上運行它就好像該應用程序剛剛安裝。 – Paulw11

+0

是的,但真實的設備有同樣的問題。如果我的手機上安裝了舊版本的應用程序,並安裝了ios 8或9,然後如果升級到使用xcode 8開發的應用程序的新版本,則所有保存的NSUserDefaults值將返回零。我測試它的方式是:我用xcode 7安裝舊版本的應用程序,然後殺死應用程序並在iPhone上安裝帶有xcode 8的新版本。一些先前保存的用戶設置消失了,將該應用視爲新安裝!它發生在所有ios 8-10設備上 – Samira

+1

我剛剛創建了一個簡單的測試項目,如果該值爲零,則會設置NSUserDefaults值,如果存在,則會打印它。我在iOS 9.3.4設備上的Xcode 7.3下運行它,並創建了默認設置。第二次運行按預期打印默認值。然後我在Xcode 8b3下運行該項目,並按預期打印默認值。 – Paulw11

回答

0

我注意到SDK 10不會導致任何NSUserDefaults的問題。

那只是訂貨的項目問題,AppDelegate我此行[self setupForForegroundLaunch:application option:launchOptions];

之前調用[[TrackingManager sharedTrackingManager] setIsBackground:NO];雖然我一般都在setupForForegroundLaunch函數初始化Entitlement_Group和TrackingManager類單也Entitlement_Group獲取與零值開始這導致了這個問題,我只改變了這兩條線的順序,現在一切正常。