2009-09-02 11 views
12

Posiadam obiekt entity Kraj z nazwą kraju i numerem kierunkowym kraju. Jest to podklasa obiektu NSManagedObject i używam go z podstawowym modelem danych do przechowywania jego wartości do magazynu trwałego.Podklasa NSManagedObject poza zarządzanym obiektem jako normalnym obiektem

Mam miejsce, w którym ten sam obiekt Country będzie używany jako normalny obiekt, tj. Użyję go do przechowywania tymczasowej nazwy kraju.

Do tego mam zainicjowaniu Kraj następująco

[NSManagedObject alloc] init] 

Inicjowanie pomyślnie wykonane, ale nie jestem w stanie ustawić dowolną właściwość do tego obiektu. Zrobiłem więc eksplorację. W tym stwierdziłem, że init dla NSManagedObject nie jest obsługiwany zgodnie z dokumentacją.

Nie wiem, jak korzystać z kraju NSManagedObject z CoreData, a także normalny obiekt.

Odpowiedz

10

2-ty akapit przegląd klasy Documentation za NSManagedObject:

zarządzany obiekt jest związany z opis jednostki (instancją NSEntityDescription), która zapewnia metadane dotyczące obiektu (w tym nazwa encja, która reprezentuje obiekt i nazwy jego atrybutów i relacji) oraz z kontekst obiektu zarządzanego, który śledzi zmienia się na wykresie obiektu. Ważne jest, aby obiekt zarządzany był odpowiednio skonfigurowany do pracy z rdzeniem z danymi Core . Jeśli bezpośrednio utworzysz zarządzany obiekt , musisz wywołać oznaczony inicjator (initWithEntity: insertIntoManagedObjectContext :).

Z dokumentacji metody:

Ważne: Ta metoda jest wyznaczony initializer dla NSManagedObject. Nie powinieneś zainicjować zarządzanego obiektu po prostu przez wysyłając init.

Dokumentacja jest w rzeczywistości bardzo dobra.

Nie należy próbować używać obiektu NSManagedObject poza stosem danych CoreData. Obiekty NSManagedObject są dość jawnie zaprojektowane do pracy w poprawnie skonfigurowanym środowisku Core Data. Jeśli potrzebujesz tymczasowej instancji, możesz utworzyć magazyn w pamięci lub utworzyć go w zwykłym sklepie i po prostu nie zapisuj zmian bez wcześniejszego usunięcia.

+0

Dzięki! Dlatego nie można zainicjować tak, jak robimy to dla normalnego obiektu. Przypuszczam, że odwołujesz się do NSInMemoryStoreType dla magazynu trwałego, więc wstawiony obiekt będzie przechowywany w ulotnej pamięci RAM. Mam jeszcze jedno pytanie - kiedy faktycznie zostanie obroniona, czy mamy do spłukiwania go ręcznie? – raksja

+0

Zostanie wyczyszczone, gdy powiesz mu, że chcesz wyczyścić (ręcznie) lub gdy aplikacja się zakończy ... InMemoryStores działają tak samo, jak inne sklepy, tylko że trwałość jest ... tylko w pamięci. – bbum

2

Użyj initWithEntity:insertIntoManagedObjectContext: i przeprowadź nil dla kontekstu obiektów zarządzanych .

Powiązane problemy