2016-09-29 4 views
2

я мог бы получить данные из IOS, но смотреть. Если я сохраню данные с помощью расширения watchkit, IOS не сможет получить данные. Так что это так странно. И я добавил группу и создаю профиль. следующий мой Отрывок:Что вызывает это? NSUserDefaults не может обмениваться данными между IOS и смотреть в watchkit Project

class InterfaceController: WKInterfaceController { 

@IBOutlet var outputLabel: WKInterfaceLabel! 
override func awake(withContext context: Any?) { 
    super.awake(withContext: context) 

    // Configure interface objects here. 
} 

override func willActivate() { 
    // This method is called when watch view controller is about to be visible to user 
    super.willActivate() 
} 

override func didDeactivate() { 
    // This method is called when watch view controller is no longer visible 
    super.didDeactivate() 
} 


// load the data from the IOS 
@IBAction func loadData() { 
    let userDefaults = UserDefaults.standard 
    userDefaults.synchronize() 
    let outputData = userDefaults.string(forKey: "share") 
    self.outputLabel.setText(outputData) 
} 
} 

class ViewController: UIViewController { 

@IBOutlet weak var inputData: UITextField! 
@IBOutlet weak var inputLabel: UILabel! 
@IBOutlet weak var outputLabel: UILabel! 

// input string into the fieldText and save them in Group by NSUserDefaults 
@IBAction func saveData(_ sender: AnyObject) { 
    let inputData1 = self.inputData.text 
    self.inputLabel.text = inputData1 
    let userDefaults = UserDefaults.standard 
    userDefaults.setValue(inputData1, forKey: "share") 

    userDefaults.synchronize() 
    self.outputLabel.text = userDefaults.string(forKey: "share") 

} 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
} 
+0

вы можете проверить группу приложений из вашего файла прав? –

+0

как проверить? Я создал группу и мог найти groupName.entitiements в моем проекте. Это работает? – Maxwell

+0

да. вот что я говорю. для доступа к требуемому общедоступному значению вам нужно указать это имя группы приложений при его запросе. Например: [[NSUserDefaults alloc] initWithSuiteName: appGroup] –

ответ

1

Несмотря на расширение приложения расслоение вложен в пачке содержащего его приложения, бегущая на приложение и содержит приложение, не имеют прямого доступа к контейнерам друг друга.

Для обеспечения совместного использования данных, используйте Xcode или Developer портал для того, чтобы приложение групп для содержащего приложения и содержащихся в нем расширения приложений. Затем зарегистрируйте группу приложений в портале и укажите группу приложений для использования в содержащем приложении.

После включения приложения групп, расширение приложений и содержащий его приложение может одновременно использовать NSUserDefaults API для совместного доступа к предпочтениям пользователя. Чтобы включить общий доступ, использовать initWithSuiteName: метод для создания экземпляра объекта нового NSUserDefaults, передавая идентификатор общей группы

Objective C

// Create and share access to an NSUserDefaults object 

NSUserDefaults * sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName: @"com.example.domain.MyShareExtension"]; 

// Use the shared user defaults object to update the user's account 

[sharedDefaults setObject:@"Your Value" forKey:@"Your Key"]; 

скоро:

func saveUserDefaults() { 

let sharedDefaults = NSUserDefaults(suiteName: "com.example.domain.MyShareExtension") 
    sharedDefaults?.setObject("Your Value", forKey: "Your Key") 
    sharedDefaults?.synchronize() 

} 
+0

Я создаю группу под названием «gourp.xxx.xxx» по xcode. Включите группы приложений, я могу найти xxxx.entitlements в своем проекте. Но я до сих пор не могу обмениваться данными между часами и IPhone. Есть ли проблема при настройке? – Maxwell

+0

Спасибо, друг. Я нахожу причину. Группы приложений WatchOS2.0 не могли больше обмениваться данными с разными устройствами. Мы должны использовать WCSession для связи с различными устройствами. – Maxwell

1

Если вы хотите создать общий userdefaults между устройствами необходимо использовать следующее:

GET

UserDefaults(suiteName: "GROUP NAME")!.object(forKey: "share") 

SET

UserDefaults(suiteName: "GROUP NAME")!.set("Test", forKey: "share") 

Где GROUP NAME - это имя группы, которое вы установили, когда вы создала вашу группу приложений.

+0

Я тестирую его таким образом. Я создал группу для совместного использования, включил группу приложений, и я мог найти файл groupname.entitlements в проекте watchOS. Что-то не так я не нашел? – Maxwell

+0

Спасибо, друг. Я нахожу причину. Группы приложений WatchOS2.0 не могли больше обмениваться данными с разными устройствами. Мы должны использовать WCSession для связи с различными устройствами. – Maxwell

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