2014-11-18 3 views
2

У меня есть приложение, написанное в Swift (iOS 8), которое при первом открытии предлагает вам перейти к настройкам на панели основных настроек iOS. Он использует этот код:iOS Настройки Bundle Empty при первом посещении

UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!) 

Это прекрасно работает, за исключением того, что панель настроек пуста, когда вы приедете. Если вы нажмете кнопку «Назад», затем вернитесь в настройки приложения, появятся все параметры.

Я предполагаю, что это связано с той же проблемой, где nsuserdefaults не существует, пока пользователь не посетит панель настроек.

В любом случае, есть ли у кого-нибудь идеи, как обойти это?

Примечания:

1) Это происходит только на первом запуске из приложения после того, как изначально установлен. Как только панель настроек посетила хотя бы один раз, она работает нормально.

2) Мое приложение уже проверяет наличие начального значения по умолчанию; если он отсутствует, он инициализирует ВСЕ настройки, как для текущего сеанса, так и записи их в набор параметров - я проверил, что эта часть работает, перевернув одно из значений по умолчанию от истины к false и заметив, что оно является ложным при первом представлении настройки.

ответ

0

Не знаете, как вы устанавливаете значения по умолчанию на основе вашего описания. Вы можете попытаться установить их таким образом.

var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 
let setValue = "yoururl"  
defaults.setObject(setValue, forKey: "url") 
defaults.synchronize() 

Чтобы посмотреть, что находится в значении до того, как вы установили, просто добавьте эту строку после строки var. Затем добавьте его после defaults.synchronize(), чтобы узнать, что было установлено.

println(defaults.objectForKey:@"url") 

Также вы можете попробовать установить их во время процесса сборки со сценарием.

+0

Спасибо, я уже это делаю. См. Мою заметку №2 в исходном вопросе. –

0

Вы должны зарегистрировать свои идентификаторы пользователя со значениями по умолчанию при запуске приложения, поэтому значения создаются, если они не существуют. Пример:

var itemDefaults = Dictionary<String,NSNumber>() 
itemDefaults["myKey"] = NSNumber(int: 1) 

let userDefaults = NSUserDefaults.standardUserDefaults() 
userDefaults.registerDefaults(itemDefaults) 
+0

Спасибо, я уже это делаю. См. Мою заметку №2 в исходном вопросе. –

+0

Я беру это обратно - я не использую метод registerDefaults.Я устанавливаю значение по умолчанию при запуске, хотя: 'вар Prefs = NSUserDefaults.standardUserDefaults() prefs.setInteger (30, forKey: "длительность") prefs.synchronize()' Как я понимаю, это пишет к Панели настроек - по крайней мере, это можно проверить, посетив настройки. –

3

После дальнейших исследований и нескольких часов возиться, у меня больше нет проблемы. Я думаю, что это одна из двух вещей: с # 2 наиболее вероятным является ИМО:

1) Перенесена инициализация из моего класса модели в мой AppDelegate. (Несмотря на то, что мои модельные классы были успешно инициализированы, мне нравится делать это из AppDelegate.)

2) Убедитесь, что я заставил приложение SETTINGS прекратить работу перед установкой нового приложения (используя прокрутку вверх жест).

Даже после выполнения # 1 я видел поведение случайным образом, и я думаю, что это связано с самим настройками. Еще одно поведение, которое я видел, - это список установленных приложений под SETTINGS, которые фактически повторялись - это исчезло бы, если бы я принудительно прекратил это. Поэтому я предполагаю, что у меня должны были быть принудительные настройки между установками.

+0

2) является ответом для меня (с тем же вопросом). Итак, есть ли более элегантный (удобный) способ достижения этого. У меня возникла эта проблема при развертывании/тестировании на физическом устройстве; симулятор не имеет проблем. – Steffo

+0

Steffo, наконец, я установил приложение для инициализации всех настроек при первом запуске. Мне нужно было добавить заставку при первом запуске, поэтому пришлось инициализировать настройку для этого - просто было просто идти вперед и делать все настройки одинаково. –

Смежные вопросы