2013-01-22 7 views
6

Używam frameworka Magical Record do zapisywania ustawień użytkownika. Teraz, po raz pierwszy, chcę zapisać rzeczy w wątku tła. Na stronie github w Magical Record znajduje się przykładowy fragment, którego nie w pełni rozumiem:Zapisywanie w trybie Magical Record w tle

Person *person = ...; 
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){ 

    Person *localPerson = [person MR_inContext:localContext]; 

    localPerson.firstName = @"John"; 
    localPerson.lastName = @"Appleseed"; 

}]; 

Dlaczego potrzebny jest pierwszy wiersz? Czy nie mogę po prostu całkowicie stworzyć Osoby w bloku? Dziękuję Ci!

Odpowiedz

12

Oczywiście, że możesz. Ten przykład po prostu chwyta obiekt person z zewnętrznego kontekstu (domyślny lub inny) i daje mu wskaźnik do localContext, dzięki czemu można go zaktualizować w tle. Jeśli było stworzenie person od zera można zrobić coś takiego:

[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){ 

    Person *localPerson = [Person MR_createInContext:localContext]; 

    localPerson.firstName = @"John"; 
    localPerson.lastName = @"Appleseed"; 

}]; 

I gotowe.

PS. Zauważ, że MR_createInContext: to metoda klasy o nazwie Person (zamiast metody instancji MR_inContext:, która jest wywoływana w instancji person).

+0

Jak widać, metoda pisałem powyżej wydaje się być przestarzałe, jakie metody należy użyć, aby zapisać w tle? Istnieje kilka "nowych" metod wymienionych, ale żadna z nich nie ma "tła" w nazwie. – Linus

+0

@LinusAn To zależy od wersji MagicalRecord, której używasz. Możesz sprawdzić ich [repozytorium github tutaj] (https://github.com/magicalpanda/MagicalRecord) (Wierzę, że 'saveWithBlock:' jest analogiczną metodą w v3.x) – Alladinian

+0

Ach, dziękuję bardzo! Wtedy użyję tego. Nie wiedziałem, że v3 już nie działa, lepiej pobierz najnowszą wersję. – Linus

1

Tak, można również utworzyć osobę w bloku. Metoda inContext: jest konieczna tylko wtedy, gdy pobierasz na przykład osobę z innego kontekstu. Uwaga: jeśli utworzysz osobę w bloku, powinieneś użyć metody createInContext :.