2015-08-09 1 views
1

Я работаю над приложением, которое регистрирует пользователя и загружает некоторые данные, такие как друзья, некоторые местоположения и т. Д. Это делается в пользовательском контроллере панели управления, который отображается после экрана входа и данные хранятся в массивах. Любой другой контроллер View имеет ссылку на этот контроллер панели вкладок, чтобы захватить их собственную копию данных.iOS - Хранить данные для использования AppDelegate и другими контроллерами View

У меня также есть прослушиватель событий, работающий в App Delegate, для обновления некоторых пользовательских данных, но мне нужно получить доступ к пользовательским данным, которые я уже выбрал при обработке прослушивателя событий. Это нормально, если приложение запущено, поскольку контроллер панели вкладок уже загружен, и я могу отправить уведомление в делегат приложения и обрабатывать его в контроллере панели вкладок, но когда приложение не работает, то, очевидно, нет экземпляр для обработки уведомления.

Что было бы лучшим способом сохранить загруженные данные для использования, когда приложение будет закрыто, но чтобы обработчик событий мог получить к нему доступ? Я подумал о Core Data, но он регулярно обновляется, поэтому кажется немного переборщившим, но потом я никогда не делал этого раньше, так что это может быть ответ.

Любые мысли или уроки из опыта были бы замечательными!

+0

Я немного смущен здесь. Вы спрашиваете, как обращаться с фоновой выборкой или как хранить данные настойчиво, когда приложение не работает? Если приложение не находится на переднем плане, то нет смысла запускать прослушиватель событий в App Delegate (кроме фоновой выборки). Если это для постоянного хранения, это нечто другое. – Jorn

+0

@Jorn Я могу обработать фоновый выбор. Это постоянство данных, на которое я ищу совет. Слушатель событий для bluetooth, поэтому он должен запускаться, пока приложение находится в фоновом режиме или закрыто. Слушатель событий запускается в App Delegate, как только пользователь входит в систему и останавливается при выходе из системы. – SimonTheEngineer

+0

Я добавил ответ ниже, надеюсь, что это то, что вы ищете :-) – Jorn

ответ

1

Существует несколько вариантов хранения данных. Один простой подход - хранить данные непосредственно на диске в plist. Добавить данные в словарь или массива и сохранить его, используя следующий код:

//Read from file: 
let documents = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String 
let path = documents.stringByAppendingPathComponent("SavedFile") 
if let yourData = NSDictionary(contentsOfFile: path) as? [String: AnyObject] { //Cast to correct type 
    //Do stuff with the data 
    } 

//Write to disk: 
let yourData = [String: AnyObject]() //Your data 
let documents = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String 
let path = documents.stringByAppendingPathComponent("FileToSave") 
(yourData as NSDictionary).writeToFile(path, atomically: true) 

Использование plists отлично работает для небольших объемов данных и, как правило, когда у вас есть некоторые пользовательские данные для хранения на диске. В вашем случае этого может быть достаточно.

Если у вас больше данных, то Core Data - действительно хороший вариант. Некоторые из преимуществ Core Data - то, что он управляет множеством беспорядков за кулисами и очень хорошо интегрируется с UITableViewController. Здесь я не буду подробно описывать основные данные, но, короче говоря, немного больше работы по настройке, и вы получаете максимальную выгоду, когда у вас есть несколько наборов данных в одном формате (например, объект новостей содержащий заголовок, субтитры, основной текст, изображение и т. д., повторяется много раз). Использование основных данных для хранения данных одного пользователя, вероятно, не является оптимальным, но трудно сказать, не зная точно, какие данные вы храните.

Другой вариант - хранить данные в NSUserDefaults, но это в основном предназначено для настроек и очень маленьких данных, а не для списка друзей пользователя и т. Д. (Но это возможность).

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

+0

Спасибо за предложение. Я использовал Core Data, поэтому я понимаю, как это работает, но данных не так много, поэтому, вероятно, слишком сложно для того, что я хочу. Я посмотрю на сохранение на диск, хотя, спасибо! – SimonTheEngineer

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