SharedInstance фреймворка Singleton доступен из iOS и WatchKit Target

Я создал структуру Swift под названием SharedLocation с одноэлементным классом Swift "SharedLocationManager" внутри него, например:

public class SharedLocationManager: CLLocationManager, CLLocationManagerDelegate
{
public class var sharedInstance: SharedLocationManager {
    struct Static
    {
        static var onceToken : dispatch_once_t = 0
        static var instance : SharedLocationManager? = nil
    }
    dispatch_once(&Static.onceToken)
    {
            Static.instance = SharedLocationManager()
    }
    return Static.instance!
}

public override init()
{
    //do init stuff

}

Общий экземпляр этого класса должен быть доступен из моего приложения iOS (написанного на Objective-C) и моего расширения WatchKit (написанного на Swift).

я импортировал структуру в iOS ViewController следующим образом:

 @import SharedLocation

а в Watch InterfaceController вот так:

import SharedLocation

Я могу получить экземпляр одноэлементного класса в обеих целях, НО это разные экземпляры (init() вызывается дважды). Когда я получаю доступ к sharedInstance внутри WatchKit Target, все работает нормально, и я каждый раз получаю один и тот же экземпляр.

Возможно ли вообще иметь одноэлементный класс с несколькими целями?


person iVentis    schedule 24.03.2015    source источник
comment
И приложение, и WatchKit работают в разных экземплярах, поэтому у вас есть два разных экземпляра одноэлементных классов, вы не можете получить доступ к одному из другого.   -  person iphonic    schedule 24.03.2015
comment
Есть ли обходной путь??   -  person iVentis    schedule 24.03.2015
comment
почему ты хочешь сделать это? Хотите получить доступ к регистрации местоположения в приложении из watchkit?   -  person iphonic    schedule 24.03.2015
comment
Это работающее приложение, и я хочу запустить прогон на часах, а затем иметь возможность продолжить прогон на телефоне, поэтому я хотел сделать все сервисы на основе местоположения внутри общедоступного класса, где обе цели могут получить доступ к одним и тем же данным прогона и метод didUpdateLocation   -  person iVentis    schedule 24.03.2015
comment
Это невозможно, может помочь общий файл в папке группы. См. один из моих ответов здесь stackoverflow.com/a/ 27796037/790842   -  person iphonic    schedule 24.03.2015
comment
и что вы предлагаете хранить в этом общем файле?   -  person iVentis    schedule 24.03.2015
comment
запускать данные, конечно? или данные, которые вы хотите использовать в расширении watchkit?   -  person iphonic    schedule 25.03.2015


Ответы (1)


Нет, невозможно иметь один экземпляр синглтона, совместно используемый вашим расширением и приложением. Ваше расширение WatchKit и ваше приложение для iOS работают в разных процессах. Вы можете сохранить данные в общей групповой папке, если хотите получить доступ к этим данным в своем расширении и в своем приложении. Вы также можете использовать такие фреймворки, как MMWormhole, если хотите обмениваться данными между своим расширением и приложением.

person Stephen Johnson    schedule 24.03.2015