2016-02-17 3 views
3

Я использую отличный SwiftyUserDefaults, обертка для NSUserDefaults с Swift, чтобы мое приложение сохраняло определенный массив данных, например (много кода удалено, чтобы показать только важные части :Сделать массив SwiftyUserDefaults доступным для iOS и приложения watchOS

Рабочий код

import SwiftyUserDefaults //The following is to show implementation in the parent iOS app. It works fine. 
    class ViewController: UICollectionViewController { 

    var arrayToStore = DefaultsKey<NSArray>("arrayToStore") 

    override func viewDidLoad() { 
     Defaults[arrayToStore] = ["Element 1", "Element 2", "Element 3"] 
     } 
    func aFunctionThatNeedsToReadTheArray() { 
     print([Defaults[arrayToStore]]) 
     } 
    } 

Исследование

выше работает отлично, но я ALS o хотите, чтобы приложение watchKit watchOS 2 этого родительского приложения могло читать arrayToStore.

Я сделал немного research и узнал, что Apple предлагает решение для этого, группы приложений, которые позволяют вещам в NSUserDefaults и других средствах хранения данных быть доступными в приложениях - в данном случае между родительским приложением iOS и его компаньон watchOS watchKit приложение. EDIT: Я узнал, что СПАСИБО @PETAHCHRISTIAN, ЧТО ГРУППЫ APP НЕ РАБОТАЮТ ДЛЯ WATCHOS 2. ТАК, КАКИЕ-ЛИБО ДРУГИЕ СРЕДСТВА?

Редактировать 2: Знание того, что группы приложений не является решением, я сделал несколько больше исследований и определил, что возможное решение - это основа WatchConnectivity. Правильно ли это, и если да, то как я могу использовать его, чтобы позволить часовому приложению иметь доступ к arrayToStore?

Вопрос

Однако мой вопрос: Как мне это сделать с SwiftyUserDefaults? Я хочу иметь arrayToStore, массив в родительском приложении, читаемый приложением watchOS 2 через группы приложений (или другое означает, что если есть лучший способ ПРИМЕЧАНИЕ: Благодаря @PetahChristian я узнал, что группы приложений не являются как это сделать. Как я могу получить желаемый результат приложения часов, просматривающего массив из родительского приложения другими способами?).

То, что я пытаюсь:

  1. Включить приложение группы по, в «Возможности» из приложения IOS и watchKit приложение, поворачиваясь на приложение групп и выбрать группу приложений, как показано в ответ here
  2. В расширении приложения для приложения watchKit, используя print([Defaults[arrayToStore]]), в результате получается «Использование неразрешенного идентификатора arrayToStore». Ожидаемый результат печати «Элемент 1», «Элемент 2», «Element 3»
+0

[группы приложений не поддерживаются в watchOS 2] (http://stackoverflow.com/questions/30851729/nsuserdefaults-not-working-on-xcode-beta-with-watch-os2). –

+0

@PetahChristian Спасибо! Если вы опубликуете ответ о том, как это сделать без групп приложений, я был бы рад принять его! – rocket101

ответ

2

Используйте WatchConnectivity

Вы можете отправить запрос от часов к телефону, а затем послать что-то обратно в часы , Я бы сохранил массив в Singleton, а затем использовал функцию WatchConnectivity sendMessage. Эта функция работает, даже если приложение iPhone находится в фоновом режиме.

+0

Спасибо за помощь! Мои извинения, я все еще изучаю Свифт, и я не уверен, что знаю, как реализовать то, что вы предложили: если вы случайно добавите какой-то код в свой ответ, чтобы показать мне, что вы имеете в виду, это было бы здорово ... И спасибо за ответ, я принял его. – rocket101

+0

Нет проблем. Я многому научился в этом туроале: http://www.raywenderlich.com/117329/watchos-2-tutorial-part-4-watch-connectivity Это потрясающе и легко понять. Я бы посоветовал вам следовать этому, потому что это в основном та же проблема, что и у вас – user2529173