2016-08-10 2 views
0

У меня было приложение, работающее на iOS 9, и я создал новую сборку для iOS 10 с Xcode 8 beta 4, теперь, когда я обновляю приложение из предыдущей версии (iOS 9) в новую версию (iOS 10) в этом сценарии ...iOS NSUserDefaults не работает, если обновлять приложение с ios 9 до ios 10

Установите предыдущую версию с Xcode 7 на iPhone (с помощью ios 9 или 10), затем убейте приложение и установите новую версию с помощью Xcode 8 beta 4 на том же устройстве обрабатывает обновление как новую установку, поэтому все сохраненные значения NSUserDefaults возвращают нуль!

Я тестировал образец приложения и следил за сценариями, в этом случае проблем с NSUserDefaults не было, поскольку я использовал [NSUserDefaults standardUserDefaults] для сохранения и извлечения значений, но в следующей реализации, у которой есть проблема с использованием совместно используемого контейнера для сохранения данных. I верьте, что «entitlementGroup» вызывает проблему!

Возможно, SDK 10 не сможет распознать ранее созданный общий контейнер с помощью SDK 9! Есть ли в этом мысль? Проблема в том, что я не могу исправить код, заменив [NSUserDefaults standardUserDefaults] вместо использования права доступа, поскольку пользователи, которые в настоящее время используют предыдущую версию приложения и любое изменение в новой версии, не исправляют проблему, поскольку она требует исправления в двух версиях.

Вот основные части кода (написанные предыдущего разработчика):

@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

У вас есть новые моделируемые устройства iOS 10 с Xcode 8, поэтому при запуске на этих устройствах, как будто приложение было только что установлено. – Paulw11

+0

Да, истинные, но настоящие устройства имеют одинаковую проблему. Если у меня уже установлена ​​старая версия приложения, установленного на моем телефоне с помощью ios 8 или 9, а затем, если я обновляюсь до новой версии приложения, которое разработано с помощью xcode 8, все сохраненные значения NSUserDefaults возвращают нуль. Я тестирую это: устанавливаю старую версию приложения с помощью xcode 7, а затем убиваю приложение и устанавливаю новую версию с помощью xcode 8 на iPhone. Некоторые ранее сохраненные настройки пользователя исчезли и рассматривают приложение как новую установку! Это происходит на всех устройствах ios 8-10. – Samira

+1

Я просто создал простой тестовый проект, который устанавливает значение NSUserDefaults, если он равен нулю или печатает его, если он присутствует. Я запускал его под Xcode 7.3 на устройстве iOS 9.3.4, и он создал значение по умолчанию. Второй запуск печатал значение по умолчанию, как ожидалось. Затем я запускал проект под Xcode 8b3 и печатал значение по умолчанию, как ожидалось. – Paulw11

ответ

0

я заметил, что 10 SDK не вызывает проблем с NSUserDefaults.

Это было только приказывать вопрос в проекте, в AppDelegate я звоню [[TrackingManager sharedTrackingManager] setIsBackground:NO]; до этой линии [self setupForForegroundLaunch:application option:launchOptions];

В то время как я обычно имею инициализирован Entitlement_Group в setupForForegroundLaunch функции и одноточечный из TrackingManager класса также Entitlement_Group получает инициирован с нулевой стоимостью что вызвало проблему, я только изменил порядок этих двух линий, и теперь все работает хорошо.