2013-01-25 18 views
7

NSMergeByPropertyObjectTrumpMergePolicy i NSOverwriteMergePolicy jest taki sam w jednym. Właściwość zastępuje tę w sklepie.Co to jest konflikt w NSManagedObject i jaka jest różnica między niektórymi zasadami scalania?

Czym różnią się między sobą? We wszystkich przypadkach mogę pomyśleć, czy ta w trwałym sklepie uległa zmianie, czy nie, własność unieważnia sklep z trwałymi danymi.

Co to jest konflikt?

Uważam, że konflikt oznacza po prostu, że dane są różne. Czy to oznacza, że ​​pierwotnie zaprojektowano podstawowe dane, które po zapisaniu danych nie mogą być aktualizowane?

Jeśli konflikt jest czymś innym niż "inne dane", jaka jest różnica między NSOverwriteMergePolicy i NSErrorMergePolicy?

W obu przypadkach zwykła różnica danych nie jest konfliktem i dlatego nie może być konfliktu.

Odpowiedz

10

Czy to oznacza, że ​​pierwotnie zaprojektowano dane podstawowe, które po zapisaniu danych nie mogą być aktualizowane?

Nie. W takim razie nie miałoby to większego znaczenia, prawda?

Co to jest konflikt?

W przypadku danych podstawowych konflikt może wystąpić, gdy istnieje więcej niż jeden kontekst obiektu zarządzanego (MOC) uzyskujący dostęp do tej samej składnicy danych. Jest to powszechne w aplikacjach wielowątkowych. Każdy MOC może zapisywać zmiany niezależnie od innych. Ale chcesz zachować spójny wgląd w dane we wszystkich wątkach, aby można było powiadomić, że zmiany zostały zapisane na jednym MOC i scalić te zmiany w innym kontekście. Dzięki temu konteksty są zsynchronizowane.

Ale co, jeśli spróbujesz scalić zmiany w MOC i ma różne niezapisane zmiany w tych samych danych? Podobnie, oba MOC-y zmieniły ten sam atrybut na tej samej instancji i zmieniły ją na inne wartości. Dzieje się tak, gdy dochodzi do konfliktu. Jeśli spróbujesz scalić zmiany, wyniki zależą od polityki scalania MOC. Domyślnie używa on NSErrorMergePolicy, co oznacza, że ​​scalanie nie powiedzie się, a twój kod musi jakoś rozwiązać i rozwiązać konflikt. Istnieje kilka wbudowanych zasad łączenia, które stosują różne automatyczne schematy rozwiązywania konfliktów.

Cztery wbudowane schematy rozdzielczości dają pierwszeństwo zmianom na dysku lub zmianom w pamięci. Różnią się także sposobem radzenia sobie ze sprzecznymi ze sobą zmianami w pamięci. Na przykład NSMergeByPropertyStoreTrumpMergePolicy aktualizuje wszelkie sprzeczne zmiany w pamięci, aby dopasować zmiany z innego MOC, ale pozostawia niezmienione zmiany w miejscu. NSRollbackMergePolicy różni się tym, że całkowicie odrzuca zmiany w pamięci, nawet jeśli nie kolidują one z nowymi zmianami z drugiego MOC. Możesz również utworzyć własne zasady scalania, jeśli żaden z wbudowanych schematów nie wydaje się właściwy.

W obu przypadkach zwykła różnica danych nie jest konfliktem, a więc nie może być konfliktu.

Tam na pewno mogą być konflikty. To bardzo powszechny scenariusz.

+0

Kluczem jest tutaj to, że zwykła różnica danych nie jest konfliktem.Jest niezapisaną różnicą danych na tym samym obiekcie, który staje się konfliktem. –

+0

W prawo, jeśli jeden z kontekstów obiektów zarządzanych nie ma żadnych zmian dla atrybutu, zmiana z innego MOC nie jest konfliktem - to tylko nowe informacje. –

+0

To jest klucz. Dzięki. –

Powiązane problemy