2010-06-05 16 views
5

Próbowałem zapisać dane i scalić z CoreData i multi-thread dla aplikacji na iPhone'a. Ale nie mogę uzyskać zarządzanych obiektów w głównym wątku po scaleniu.Jak zdobyć obiekty po połączeniu CoreData Context

pisałem kod właśnie tak:

[managedObjectContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) 
             withObject:notification 
            waitUntilDone:YES]; 

[self performSelectorOnMainThread:@selector(didMerged:) withObject:objectIds waitUntilDone:YES]; 

Więc starałem się przekazać objectIds uzyskać instancji NSManagedObject w głównym wątku zostały wygenerowanego w innym wątku. Najpierw wypróbowałem metodę "objectWithId", ale wygenerowałam obiekty fault. Potem próbowałem „existingObjectWithID” metoda, ale generowane obiektów częściowo, a inne były zerowe z następujący błąd:

[Error] Error Domain=NSCocoaErrorDomain Code=133000 "Operation could not be completed. (Cocoa error 133000.)" 

Co jest nie tak? Czy istnieje sposób pobierania wszystkich obiektów przez objectIds po scaleniu w innym wątku?

Dziękuję.

Odpowiedz

2

Wygląda na to, że scalanie kontekstu nie powiodło się.

developer documentation on error 133000

NSManagedObjectReferentialIntegrityError = 133000

NSManagedObjectReferentialIntegrityError Error code to denote an attempt to fire a fault pointing to an object that does not exist. The store is accessible, but the object corresponding to the fault cannot be found. Available in Mac OS X v10.4 and later. Declared in CoreDataErrors.h.

+0

Dziękuję za szybką odpowiedź. Hmm ... W innym wątku mogę zapisać dane bez żadnych błędów. Jak mogę je połączyć z kontekstem w głównym wątku bez błędu # 133000? – Emmettoc

0

Po pierwsze, trzeba rozwinąć swoje błędy. Zmień wyjście na:

NSLog(@"Error: %@\n%@", [error localizedDescription], [error userInfo]); 

To da ci więcej informacji.

Po drugie, jeśli pracujesz z jednym kontekstem w wielu wątkach, robisz to źle. Musisz przejrzeć dokumentację dotyczącą danych podstawowych i wątków. Podstawowa zasada brzmi: Jeden kontekst na wątek; Kropka. Jeśli chcesz zarządzać danymi w wielu wątkach, obejrzyj powiadomienia o zapisach z wątków działających w tle w głównym wątku. Proponuję przejrzenie moich artykułów w sieci dla programistów komputerów Mac, na przykładach.

+0

Dziękuję. Sprawdzę błąd w szczegółach. Tak, stworzyłem konteksty dla każdego wątku. – Emmettoc