2015-01-27 6 views
7

Pracuję nad zegarkiem Apple. Próbuję przekazać dane tablicowe z jednego InterfaceController do innego przy użyciu PageBasedNavigation w watch-kit. Czy ktoś może mi podpowiedzieć, w jaki sposób przekazać tablicę, gdy program w trybie machnięcia pozostanie w programie programowo?Przesyłaj dane tablicowe z jednego interfejsu do drugiego w zestawie zegarków za pomocą nawigacji opartej na stronie?

do tworzenia stron opartych interfejs i wykonać następujące kroki:

  1. W moim storyboard, dodać kontrolery interfejsów dla każdej ze stron w interfejsie.

  2. Kliknąć i przytrzymując klawisz Control, kliknąć główny kontroler interfejsu aplikacji i przeciągnąć go do innego kontrolera interfejsu.

  3. Drugi kontroler interfejsu powinien podświetlać, wskazując, że przejście jest możliwe.

  4. Zwolnij przycisk myszy.

  5. Wybierz następną stronę z panelu przejścia między relacjami.

Korzystając z tej samej techniki, utwórz segues od każdego kontrolera interfejsu do następnego.

Odpowiedz

5

Sposób WatchKit przekazywania obiektów do PAGE- oparty na WKInterfaceController jest inny niż w systemie iOS. Gdy zobaczysz relację między relacjami na Storyboard, po jej kliknięciu nie ma opcji nazywania tego segue (co jest pierwszym krokiem do użycia metody prepareForSegue: w systemie iOS).

Zamiast tego należy przekazać jedną tablicę zawierającą obiekty "kontekstowe", z których jeden zostanie dostarczony do każdego kontrolera WKView, który zarządza stroną. W Objective-C:

+ (void)reloadRootControllersWithNames:(NSArray *)names 
          contexts:(NSArray *)contexts 

w Swift:

class func reloadRootControllersWithNames(_ names: [AnyObject]!, 
          contexts contexts: [AnyObject]!) 

Jeśli masz obiekt, który chcesz przejść z jednego do drugiego, można ustawić ten obiekt jako kontekst dla każdej strony:

Nieco sprzeczne intuicyjnie z nazwy metody, podczas gdy ta metoda nazywa się reloadRootControllersWithNames:, WatchKit documentation on Managing Page-Based Navigation wskazuje, że ta sama metoda powinna zostać użyta do zaszczepienia tych wartości w lau nch, jak również za każdym razem, gdy chcesz ponownie załadować te dane w czasie wykonywania.

1

Nie pracuję już z Object-C, ale myślę, że obiekt C jest podobny. Pracuję teraz z Swift. Z Swift, można utworzyć nowy plik singleTon.swift i umieścić to wnętrze, które:

// 
// singleTon.swift 
// testSingleTon 
// 
// Created by Standard on 1/14/15. 
// Copyright (c) 2015 Standard. All rights reserved. 
// 

import UIKit 

class singleTon: NSObject { 
    class var sharedInstance : singleTon { 
     struct Example { 
      static let instance = singleTon() 
     } 
     return Example.instance 
    } 

    var number = 0 
    var array = [] 

} 

Po tym można udostępniać dane do wszystkich interfejsie aplikacji. Na przykład można zmienić dane wewnątrz pierwszej InterfaceController tak:

override func willActivate() { 
     // This method is called when watch view controller is about to be visible to user 
     super.willActivate() 
     NSLog("%@ will activate", self) 



     singleTon.sharedInstance.array = ["new"] 


    } 

można zmienić lub wziąć shareInstance w SecondInterface tak:

override func willActivate() { 
     // This method is called when watch view controller is about to be visible to user 
     super.willActivate() 
     NSLog("%@ will activate", self) 


     println("share data: \(singleTon.sharedInstance.array)") // It's will show up the ["new"] here 


    } 
0

NSUserDefaults może być używany pomiędzy kontrolerami interfejsów.

Powiązane problemy