Mam prosty model Foo
, który reprezentuje preferencje użytkownika i zawiera w sobie kod NSString
i NSNumber
. Chcę przechowywać tablicę o wartości Foo
w domyślnych ustawieniach użytkownika, aby pozostały między uruchomieniami aplikacji; i chciałbym wyświetlić je w widoku tabeli, aby użytkownik mógł je dodawać, usuwać i edytować. Rozwiązanie tego problemu wydawało się proste z wiązaniami, ale okazało się to niemożliwe, abym faktycznie pracował.Edytowalny widok tabeli powiązany z NSArrayController powiązany z NSUserDefaultsController
Po uruchomieniu mojej aplikacji rejestruję się w NSUserDefaults
archiwum z kluczem w postaci tablicy początkowej Foo
. W moim XIB mam kontroler tablicowy z tablicą treści związaną z kluczem kontrolera współdzielonego użytkownika domyślnego kontrolera values
; z kluczową ścieżką foos
; "Sprawdzanie zawartości jako wartości złożonej" zaznaczone; i NSKeyedUnarchiveFromData
jako transformator wartości. Widok tabeli jest następnie powiązany z kontrolerem macierzy i kolumnami tabeli z właściwościami Foo
.
Działa to doskonale, gdy Foo
są dodawane i usuwane z tablicy - klucz foos
w domyślnych ustawieniach użytkownika jest aktualizowany w celu odzwierciedlenia nowej zawartości tablicy. Problem polega na tym, że zmiany właściwości indywidualnych Foo
nie powodują podobnego zapisu tablicy z powrotem do domyślnych ustawień użytkownika. Sądzę, że przyczyna tego jest omawiana w sekcji "To-many Relationships" w sekcji "Rejestrowanie kluczy zależnych" w Przewodniku programowania obserwacji wartości klucza, obserwowane są zmiany w samej tablicy kontrolera tablicowego, ale zmiany właściwości zawartych elementów nie są .
Pomimo uznania tego problemu za niemożliwy do spełnienia przeze mnie, muszę się dowiedzieć, co należy zrobić, aby to zadziałało. Kiedy obserwuję zmianę na obiekcie Foo
, jaki obiekt muszę podać i jaki komunikat tak, aby cała tablica została zapisana z powrotem do ustawień domyślnych użytkownika - NSUserDefaults
, NSUserDefaultsController
, NSArrayController
? Chciałbym, żeby dokumentacja Apple miała więcej niż pobieżną wzmiankę o tym problemie i dostarczyła jakiś rzeczywisty przykładowy kod, żeby go rozwiązać. Próbowałem wszystkiego i nie mogę znaleźć magicznego zaklęcia.
Jest to podobne do How to get notified of changes to models via an NSArrayController, ale nie mogę dokonać konceptualnego skoku między tym, co robi z widokiem niestandardowym a użyciem bind:toObject:withKeyPath:options:
.
Dzięki! :)
To naprawdę brzmi jak zadanie dla CoreData, a nie NSUserDefaults. –
Czy możesz opracować? Samo myślenie o ilości dokumentacji, którą muszę przetrawić, aby zacząć ją wdrażać z CoreData, sprawia mi ból głowy. Z perspektywy modelu danych to, co próbuję zrobić, wydaje się być bardzo proste - biorąc pod uwagę złożoność CoreData, wydaje się, że to przesada. –
Ustawienia domyślne dla użytkownika dotyczą ustawień i próbujesz go użyć do przechowywania modelu danych z jego dźwiękiem. CoreData naprawdę nie jest bardzo trudne, jeśli naprawdę masz prosty model danych. xcode ma szablony projektów, które w zasadzie wykonują całą konfigurację dla ciebie. powinien rozwiązać problem, który opisujesz. –