2010-05-07 11 views
14

Więc patrząc przez Core Data Snippets, znalazłem następujący kod:Jak pobrać różne wartości w danych podstawowych?

... 
[request setEntity:entity]; 
[request setResultType:NSDictionaryResultType]; 
[request setReturnsDistinctValues:YES]; 
[request setPropertiesToFetch:[NSArray arrayWithObject:@"<#Attribute name#>"]]; 

// Execute the fetch 
NSError *error; 
id requestedValue = nil; // WTF? This isn't defined or used anywhere 
NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error]; 
if (objects == nil) { 
    // handle the error 
} 

To jest dobre i wydaje się idealne do tego co muszę ... ale w jaki sposób można z niej korzystać? Zakładam, że skoro jest to słownik zwrotny, potrzebuję klucza, aby uzyskać wartości - ale gdzie jest zdefiniowany klucz? Czy jest to linia "id requestedValue = nil"? Jeśli tak, w jaki sposób kluczem staje się "requestedValue"? Xcode daje mi ostrzeżenie kompilatora o nieużywanej zmiennej w deklaracji "requestedValue". Czuję, że tu coś pomijam.

Z góry dziękujemy za wszelką pomoc, jaką możesz zaoferować.

Odpowiedz

28

requestedVALue jest niczym i oczywiście nie jest używane (być może było to częścią innego przykładu, który został wycięty & wkleić do tego kodu przykładowego - kto wie). Możesz to po prostu zignorować.

Klucze do słownika są takie same, jak atrybuty pobrane i zdefiniowane w modelu. Na przykład, jeśli posiadasz podmiot osoby z trzema zdefiniowanymi atrybutami, imieniem, wiekiem, numerem telefonu i żądaną nazwą, będą to jedyne klucze z danymi w słownikach. Więc:

[request setEntity:entity]; 
[request setResultType:NSDictionaryResultType]; 
[request setReturnsDistinctResults:YES]; 
[request setPropertiesToFetch:[NSArray arrayWithObject:@"name"]]; 

// Execute the fetch 
NSError *error; 
NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error]; 
if (objects == nil) { 
    abort(); 
} 
for(NSDictionary* obj in objects) { 
    NSLog(@"Person: %@", [obj objectForKey:@"name"]); 
} 
// ... 

więc, jeśli masz 5 osób w swojej pamięci danych o nazwie Bob, Sally, Joe, Freida i Sue, byś zobaczyć te nazwy wydrukować. Jeśli chcesz użyć któregokolwiek z innych atrybutów (np. Ich wiek), musisz dodać to do tablicy ustawionej w setPropertiesToFetch:.

Jednak w większości przypadków najlepiej jest po prostu pobrać zarządzany obiekt. Obiekt zostanie zarzucony, więc nawet nie wprowadzisz atrybutów do pamięci, dopóki nie uzyskasz do nich dostępu. Dodatkowo, jeśli chcesz dokonać zmian w obiektach, możesz i utrzymać je w magazynie (z obiektami zarządzanymi).

+1

Idealny - dzięki za pomoc. Kluczowe fragmenty danych są naprawdę użyteczne, ale pozostawiają trochę wyobraźni, jeśli jesteś nowym użytkownikiem. Dzięki za pomoc! – Andy

+4

"mało" do wyobraźni? Pozostawiają WSZYSTKO na wyobraźnię. Czuję pragnienie, aby za każdym razem dawać sobie klapsa, kiedy moim jedynym źródłem wiedzy są dokumenty napisane przez Apple. Na szczęście istnieje StackOverflow z wieloma zabójczymi profesjonalistami, takimi jak Jason Coco i inni, którzy pomagają nam zrozumieć niejasne wiadomości kryptograficzne napisane przez Apple w ich dokumentach. Apple robi świetne produkty, ale ich dozy wysysają nieskończoność do kwadratu + 1. – SpaceDog

+2

Wygląda na to, że setReturnsDistinctValues ​​zostało zmienione na setReturnsDistinctResults – mishod

Powiązane problemy