2012-04-25 12 views
9

Mam nadzieję znaleźć sposób sprawdzenia, czy atrybut CoreData jest pusty. Sam atrybut jest typu danych binarnych. Jeśli atrybut jest pusty, mógłbym poprosić moją klasę o pobranie i zapisanie niektórych danych do tego atrybutu.Sprawdź, czy atrybut CoreData jest pusty.

Zgodnie z dokumentacją CoreData nie powinieneś kontynuować pobierania, aby zobaczyć, czy istnieją obiekty. Zastanawiam się, czy istnieje nawet sposób, aby to zrobić? bez łamania tego "prawa"?

To jest moja pierwsza próba użycia CoreData. Dodaję go do mojego kodu, co jest nieco bardziej bolesne, ale jak dotąd wszystko wydaje się być w porządku. Po prostu muszę znaleźć logiczny sposób sprawdzenia, czy atrybut ma wartości. Jeśli tak nie jest, to muszę pobrać i zapisać nowe dane, jeśli to zrobię, po prostu użyję tego, co jest w atrybucie.

Aktualizacja:

Właśnie się tej metody w ramach CoreData że zostały czytania chociaż próbuje złapać sobie przerwę na ten temat. Nie jestem pewien, czy to pomogłoby ... co wy myślicie?

willAccessValueForKey: Zapewnia obsługę wyświetlania wartości klucza i obserwacji o dostępie do .

  • (void) willAccessValueForKey: (NSString *) key Parametry key Nazwa jednej z właściwości odbiornika. Dyskusja Patrz: didAccessValueForKey: więcej szczegółów. Można wywołać tę metodę z wartością klucza równą zeru, aby upewnić się, że usterka została wywołana, co oznaczono na poniższym przykładzie jako .

[aManagedObject willAccessValueForKey: nil];

Nie wiem, naprawdę .. rzeczy, że ja nie rozumiem jest Zapewnia obsługę klucz-wartość obserwacji powiadomienie dostępu. ???

Odpowiedz

11

To powiadomienie dotyczy tego, kiedy wartość będzie dostępna.

Jeśli dobrze rozumiem, nie chcesz widzieć, czy istnieje jednostka, ale atrybut wewnątrz jednostki. Zakładam, że masz to zaznaczone jako atrybut opcjonalny.

Załóżmy, że masz binarny atrybut danych o nazwie rawData. Jeśli chcesz znaleźć wszystkie obiekty @ "MyEntity" w bazie danych, które nie mają zestawu danych dla tego atrybutu, wyślij to żądanie.

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"]; 
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"rawData = nil"]; 
NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:0]; 
+0

dobrze fajnie .. dzięki za to. To po prostu niepokój, ponieważ przeczytałem, że wydawanie wielu żądań pobierania jest niegrzeczną rzeczą: P –

+3

Zawsze możesz uniemożliwić komukolwiek stworzenie obiektu z pustym atrybutem, czyniąc go nieobowiązkowym. Lub możesz budować obiekty, które monitorują zmiany w bazie danych i dodawać/usuwać obiekty do globalnej listy, gdy mają wartość atrybutu zero/zero. –

Powiązane problemy