2015-11-20 20 views
7

Sto lavorando su un'app e un widget di cui il widget ha bisogno per ottenere i dati dall'app. Ho usato i seguenti codici per leggere e scrivere su NSUserDefaults. E ho anche usato $(PRODUCT_BUNDLE_IDENTIFIER).widget per il widget e $(PRODUCT_BUNDLE_IDENTIFIER) riferendosi al post this. Ma il widget non può ottenere i dati dall'app o NSUserDefaults. Come posso farlo funzionare?Impossibile accedere a NSUserDefaults utilizzando i gruppi di app uno ad un altro

func addTask(name: String?){ 
     let key = "keyString" 
     tasks.append(name!) 
     let defaults = NSUserDefaults(suiteName: "group.Mins") 
     defaults?.setObject(tasks, forKey: key) 
     defaults?.synchronize() 

    } 

///////

let defaults = NSUserDefaults(suiteName: "group.Mins") 
    let key = "keyString" 

    if let testArray : AnyObject = defaults?.objectForKey(key) { 
     let readArray : [String] = testArray as! [String] 
     timeTable = readArray 
     timeTable = timeTable.sort(<) 
     print("GOT IT") 
     print("timetable: \(timeTable)") 
    } 

risposta

32

Per leggere e salvare dallo stesso insieme di NSUserDefaults è necessario il seguente:

  1. Nella vostra applicazione principale, selezionare il tuo progetto nel navigatore del progetto.
  2. Seleziona il target dell'app principale e seleziona la scheda delle funzionalità.
  3. Accedere ai gruppi di app (questo comunicherà con il portale sviluppatore, poiché sta generando un insieme di titolarità, e l'ID app pertinente e così via).
  4. Creare un nuovo contenitore. Secondo l'aiuto, deve iniziare con "group.", Quindi dargli un nome come "group.myapp.test".
  5. Seleziona il target dell'estensione oggi e ripeti questa procedura per accendere i gruppi di app. Non crearne uno nuovo, piuttosto seleziona questo gruppo appena creato per significare che l'estensione Oggi è un membro del gruppo.

scrivere al vostro NSUserDefaults:

// In this example I´m setting FirstLaunch value to true 
NSUserDefaults(suiteName: "group.myapp.test")!.setBool(true, forKey: "FirstLaunch") 

Leggi dal NSUserDefaults:

// Getting the value from FirstLaunch 
let firstLaunch = NSUserDefaults(suiteName: "group.myapp.test")!.boolForKey("FirstLaunch") 

if !firstLaunch { 
    ... 
} 

Swift 3.0:

Scrivi

UserDefaults(suiteName: "group.myapp.test")!.set(true, forKey: "FirstLaunch") 

Leggi

UserDefaults(suiteName: "group.myapp.test")!.bool(forKey: "FirstLaunch")