Załóżmy, dla ilustracji, że napisałem aplikację klonu iTunes w Cocoa, która była wspierana przez CoreData. Dla uproszczenia powiedzmy, że istnieją dwie "sekcje", "Biblioteka" z takimi rzeczami, jak Muzyka, Filmy, Radio itd. A druga sekcja nazywa się "Playlisty", która zawiera listy tworzone przez użytkowników (tylko głupie listy, a nie inteligentne listy odtwarzania) .W jaki sposób zaimplementowana zostanie lista źródeł w stylu iTunes z powiązaniami + CoreData w Cocoa?
Tak więc sama SourceList będzie zazwyczaj implementowana z NSOutlineView
, co jest zazwyczaj proste.
Sekcja Biblioteka na liście źródłowej nie zawiera w rzeczywistości niczego wygenerowanego przez użytkownika, tylko "cechy" aplikacji (w zasadzie), w której sekcja Listy odtwarzania zawiera tylko własne listy utworzone przez użytkownika. W jaki sposób można to zrobić z Bindings i CoreData? Czy można powiązać sekcję Listy odtwarzania z danymi użytkownika i mieć niestandardowy sposób wyświetlania funkcji biblioteki?
Wciąż mam problemy z Wiązaniami i AppKit w ogóle, więc proszę o zachowanie mnie. Doceniam pomoc. Powinienem dodać, celuję w 10.6 i wyżej.
To jest coś, co myślałem, że trzeba będzie zrobić. Więc 'setUserPlaylists' będzie metodą zwaną Wiązaniami? Jestem niesamowicie mglisty, jeśli chodzi o to, jak działają wiązania (znam ich relacje z KVC, ale to, w jaki sposób są one faktycznie skonfigurowane z kontrolerami Array/Tree, wciąż mnie niepokoi). – jbrennan
Tak.Kakao dba o całą wiążącą magię za kulisami. Wszystko, co musisz zrobić, to zdefiniować właściwość, która spełnia KVO/KVC. Każda właściwość @synthesize spełni to wymaganie i za każdym razem, gdy użyjesz [self setSomePropertyName: someValue], zostaną wysłane odpowiednie wiadomości KVC. Przechwycenie setera nieruchomości (jak pokazałem powyżej) jest całkowicie legalne. Nie jestem pewien, jakie jest twoje źródło danych dla list odtwarzania użytkownika (coś z CoreData, jak przypuszczam), ale jeśli powiążesz go ze swoim kontrolerem, kontroler otrzyma komunikat 'setUserPlaylists:' za każdym razem, gdy lista zostanie zmodyfikowana. –