2014-07-16 8 views
6

Sto provando a condividere i dati tra la mia applicazione e un'estensione della tastiera personalizzata. Ho attivato Gruppi di app sia nella destinazione principale dell'applicazione che nella destinazione della tastiera personalizzata. Nella mia applicazione principale, aggiungo un oggetto con il seguente:NSUserDefaults non memorizza i valori tra l'app e la tastiera personalizzata in iOS 8

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.mycompany.myapp"]; 
[userDefaults setObject:someObject forKey:@"KEY"]; 

La stampa di [userDefaults dictionaryRepresentation] nella console rivela che questo oggetto è stato salvato, come fa chiamare [userDefaults objectForKey: @ "KEY"].

Tuttavia, quando provo ad accedere a questo oggetto nella estensione tastiera personalizzata:

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.mycompany.myapp"]; 
NSString *value = [userDefaults objectForKey:@"KEY"]; 

Il valore è pari a zero e una chiamata a [userDefaults dictionaryRepresentation] non rivela la voce che è stato salvato in precedenza. Sono su Xcode 6 beta 3. Qualche idea?

UPDATE fisso in Xcode 6 beta 5

+0

possibile duplicato di [NSUserDefault con App Group non funziona in iOS 8 Beta3] (http://stackoverflow.com/questions/24840993/nsuserdefault-with-app-group-is-not-working-in-ios- 8-beta3) –

+0

Ho XCode 6 beta 5 e il problema persiste ancora. –

risposta

6

alcune soluzioni probabili sono:

  1. Il vostro gruppo app non è configurato correttamente, o se non si utilizza l'identificatore di gruppo corretto con initWithSuiteName:

  2. l'accesso alla rete Non hai abilitato per la tastiera . This document stati i seguenti quando si ha l'accesso alla rete disabilitato per la tastiera (comportamento di default):

    No contenitore in comune con contenente app

  3. E 'un bug.

+0

Grazie per la risposta! Ho triplicato l'identificatore di gruppo, è corretto. Per quanto ne so, i gruppi di app sono stati impostati correttamente (basta seguire i passaggi nella sezione Capacità che ha creato le autorizzazioni per entrambi i target con l'identificatore di gruppo). Un grande vantaggio nell'abilitare l'accesso alla rete - Ho cambiato RequestsOpenAccess in YES, ho cancellato il simulatore e reinstallato; tuttavia, il problema persiste ancora. Spero che sia un bug! I test su Xcode beta 4 presto ... si aggiorneranno quindi. – bdev

2

penso che il tuo nome interno deve cominciare con il gruppo e abbinare con il contenitore che hai fatto (source).

+0

Sì, è nel modulo group.mycompany.myapp. Modificherò il mio post per renderlo più chiaro – bdev

4
  1. Set

    RequestsOpenAccess = YES; 
    
  2. Regolazioni:

    NSUserDefaults * usrInfo = [[NSUserDefaults alloc] initWithSuiteName:@"myKeyboard"]; 
    [usrInfo setObject:theme.icon forKey:@"themeName"]; // This is the new data; 
    [usrInfo synchronize]; 
    
  3. keyboardChange:

    NSUserDefaults * usrInfo = [[NSUserDefaults alloc] initWithSuiteName:@"myKeyboard"]; 
    [usrInfo synchronize]; 
    NSString * str = [usrInfo objectForKey:@"themeName"]; 
    

Quindi è possibile modificare la tastiera, ad esempio, cambiare lo sfondo

+0

C'è un modo per avere accesso in sola lettura alle impostazioni dalla tastiera e non dover chiedere l'accesso aperto? –

+0

Non ho trovato l'accesso fino ad ora. Se capisci, per favore dimmi, grazie mille. – SamSam

+0

Ho un problema simile a @bdev, ma con l'estensione Watch Kit. AppGroup ha funzionato bene in XCode 6.3 beta, ma in XCode 6.2 no. Ho aggiunto "sincronizza" come consigliato ma non è stato di aiuto. – kelin

0

Il nome del gruppo (come stabilito in Xcode) deve iniziare con "gruppo" (ad esempio," 'group.com.myName.MyApp' (Ho imparato questo quando si crea una capacità di gruppo poiché il campo del nome è già popolato con "gruppo".) E NSNserDefaults suiteName deve iniziare con un altro "gruppo", quindi "gruppo" è presente due volte, ad es. "group.group.com.myName.MyApp"). Ho imparato questo guardando la directory Libreria/Preferenze dell'app quando era in esecuzione nella sim. Nulla apparirebbe lì a meno che non ho usato questo schema.

Non riesco ancora a ottenere l'app di controllo per vedere il file di valori predefiniti del gruppo comune.

+0

A partire da OS OS 2, la capacità del contenitore condiviso è stata rimossa da Apple. È documentato da qualche parte, ma sepolto. Ho trascorso dieci ore su questo problema e ho appreso le cattive notizie da altri post. – Jeff