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.
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. –
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. –
To jest klucz. Dzięki. –