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:
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. NSRegistrationDomain
zum Hinzufügen / Entfernen von Suites und persistenten / flüchtigen Domains über Benutzer- definierte Domains? 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.
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.
Ich glaube schon, abgesehen von der persistenten Domain mit Ihrer Bundle-ID.
Nein, aber die Verwendung von -volatileDomainNames
sollte für die meisten Zwecke ausreichen.
Versuchen Sie direkt nach Ihren Änderungen [myuserDefaults synchronisieren]
aufzurufenTags und Links objective-c ios nsuserdefaults