iOS 9でアプリを実行していましたが、以前のバージョンからアプリをアップグレードすると、Xcode 8 beta 4のiOS 10用に新しいビルドを作成しましたこのシナリオでは、新しいバージョン(iOS 9)から新しいバージョン(iOS 10)に...アプリをios 9からios 10にアップグレードするとiOS NSUserDefaultsが機能しない
Xcode 7で以前のバージョンをiPhoneにインストールして(ios 9または10)、アプリを終了してXcode 8で新しいバージョンをインストールしますベータ4を同じデバイスにインストールすると、アップグレードを新しいインストールとして扱うので、NSUserDefaultsに保存された値のすべてがnilを返します!
私は[NSUserDefaults standardUserDefaults]
を使用して値を保存して取得しましたが、データを保存するために共有コンテナを使用するという問題を抱えている次の実装では、サンプルアプリケーションをテストしてシナリオに従いました。この場合NSUserDefaults
に問題はありませんでした。問題を引き起こしている "entitlementGroup"を信じてください!
SDK 10では、SDK 9によって以前に作成された共有コンテナを認識できない場合があります。それについて何か考えていますか?問題は、entitlementGroupを使用する代わりに[NSUserDefaults standardUserDefaults]
を置き換えることでコードを修正できないということです。新しいバージョンへの以前のバージョンを使用しているユーザーは、2つのバージョンで修正する必要があるため問題を修正しません。ここで
は、(以前の開発者によって書かれた)コードの主要部分である:
@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
Xcode 8でシミュレートされた新しいiOS 10デバイスがあるため、それらのデバイスで実行すると、あたかもアプリケーションがインストールされたようになります。 – Paulw11
はい、実際のデバイスには同じ問題があります。私のアプリに古いバージョンのios 8または9がインストールされていて、xcode 8で開発された新しいバージョンのアプリケーションにアップグレードすると、保存されたNSUserDefaultsの値はすべてnilになります。私がテストする方法は次のとおりです。xcode 7で古いバージョンのアプリケーションをインストールしてから、アプリケーションを終了してxcode 8で新しいバージョンをiPhoneにインストールします。以前に保存されたユーザー設定の一部が消えて、新しいインストールとして扱われます!それはすべてのIOS 8-10デバイスで発生します – Samira
これは、NSUserDefaultsの値がnilの場合はそれを設定する単純なテストプロジェクトを作成したか、存在する場合は出力します。私はiOS 9.3.4デバイスのXcode 7.3でそれを実行し、デフォルトを作成しました。 2回目の実行で期待どおりのデフォルト値が出力されました。私はXcode 8b3でプロジェクトを実行し、期待どおりのデフォルト値を表示しました。 – Paulw11