Kann jemand die Suchlistenfunktion in NSUserDefaults erklären?

8

Ich bin verwirrt über die Suchlistenfunktion in NSUserDefaults . Die Klassenreferenz sagt über% Mit der Methode co_de% class wird eine Standardsuchliste bestehend aus fünf Domänen eingerichtet. Die Dokumente für diese Methode bedeuten auch, dass diese Suchliste geändert werden kann (von mir hinzugefügte Kühnheit):

  

Nachfolgende Änderungen in der Standardsuchliste bleiben auch dann wirksam, wenn diese Methode erneut aufgerufen wird - die Suchliste ist garantiert nur beim ersten Aufruf dieser Methode Standard.

Sehen wir uns auch die Dokumente für standardUserDefaults an:

  

Rückgabewert: Ein initialisiertes NSUserDefaults-Objekt, dessen Argument- und Registrierungsdomänen bereits eingerichtet sind.

     

Diskussion: Diese Methode fügt nichts in die Suchliste ein.

Nach meinem Verständnis ist das ein Widerspruch: Entweder ist die Suchliste leer oder enthält Einträge für die Argument- und Registrierungsdomänen.

Wie auch immer, ich habe ein bisschen experimentiert:

%Vor%

Wie Sie sehen können, versuche ich init aus der Suchliste zu entfernen, indem ich sowohl NSRegistrationDomain als auch removeSuiteNamed: aufruft. Dies funktioniert nicht, zumindest nicht auf iOS, wo ich die Tests durchgeführt habe, aber ich nehme an, dass es unter Mac OS X gleich ist. Das sind meine Fragen:

  1. Gibt es unter iOS eine Möglichkeit, eine der fünf Standarddomänen aus der Suchliste eines removeVolatileDomainForName: -Objekts zu entfernen? Beachten Sie, dass es nicht unbedingt das von NSUserDefaults zurückgegebene Objekt sein muss, ich würde gerne ein eigenes Objekt erstellen. Falls es darauf ankommt: Ich bin besonders daran interessiert, standardUserDefaults loszuwerden.
  2. Wenn die obige Antwort "nein" lautet, können wir sagen, dass die fünf Standarddomänen einfach "unveränderbar" sind und dass alle Inhalte in NSRegistrationDomain zum Hinzufügen / Entfernen von Suites und persistenten / flüchtigen Domains über Benutzer- definierte Domains?
  3. Gibt es eine Möglichkeit herauszufinden, was in der Suchliste eines NSUserDefaults -Objekts steht?

Ich vermute, dass ich bereits die Antworten kenne (nein, ja und nein), aber zumindest suche ich jemanden mit mehr Erfahrung, um meinen Verdacht zu bestätigen.

    
herzbube 05.02.2012, 17:06
quelle

2 Antworten

1
  1. Um eine Domain wie NSRegistrationDomain loszuwerden, sollten Sie removeVolatileDomainForName: verwenden. Dies funktioniert jedoch nicht mit NSRegistrationDomain und NSArgumentDomain . Diese zwei können nicht entfernt werden. Versuchen Sie stattdessen, Ihre eigene Domain mit setVolatileDomain:forName: zu registrieren. Sie können diese entfernen.

    Ich glaube, dass Sie in den fünf Domänen von standardUserDefaults Ihre eigene Domain mit removePersistentDomainForName: entfernen können, indem Sie Ihre Bundle-ID übergeben. Aber ich habe das nicht ausprobiert.

    Da NSGlobalDomain persistent ist und Sie nur Ihre eigene Paket-ID an removePersistentDomainForName: weitergeben können, können Sie NSGlobalDomain nicht entfernen. Auch dies ist nicht getestet.

  2. Ich glaube schon, abgesehen von der persistenten Domain mit Ihrer Bundle-ID.

  3. Nein, aber die Verwendung von -volatileDomainNames sollte für die meisten Zwecke ausreichen.

Thomas Deniau 23.02.2012, 11:23
quelle
0

Versuchen Sie direkt nach Ihren Änderungen [myuserDefaults synchronisieren]

aufzurufen     
quelle

Tags und Links