Как «дотронуться» до сущности Core Data, чтобы вызвать NSFetchedResultsController? - PullRequest
1 голос
/ 18 февраля 2020

Скажем, у вас есть базовая сущность данных,

public class CDPerson: NSManagedObject

Вы получаете новую информацию из net ... поле изменяется,

p.name = 'Debbie'

Это CDPerson элемент «тронут» и, следовательно,

ваш NSFetchedResultsController вызовет ,

идеально.

Но, скажем, CDPerson может принадлежать CDAddress

В основных данных изменение CDAddress не вызывает изменение CDPerson

Но. При касании адреса вы НУЖНЫ прикоснуться к соответствующим элементам персонажа,

, чтобы контроллеры результатов узнали, что CDPerson было изменено.

Как "прикоснуться" к сущности компакт-диска?

Одно решение Rubbi sh, если у вас есть неважное поле,

let touch = p.creationDate
p.creationDate = touch

В качестве альтернативы вы можете добавить Int64 и

p.touchyInt = a random number, or increment, etc

Это плохие решения

Есть ли на самом деле способ "прикоснуться" к основному объекту данных для контроллеров результатов?

Это кажется критическим для распространения изменений в связанных объектах.

Трудно полагаю, что для этого нет решения.

1 Ответ

0 голосов
/ 26 февраля 2020

Базовые данные распознают изменения, запуская -willChangeValueForKey: и -didChangeValueForKey:, как указано в комментарии @pbasdf. Вы можете позвонить только -didChangeValueForKey:, если хотите, но я бы действительно сделал и то и другое.

Эти звонки также работают на отношения. Таким образом, в вашем объекте Address вы можете коснуться как значения, которое нужно изменить, так и отношения с человеком:

- (void)setCity:(NSString*)cityString
{
  [self willChangeValueForKey:@"city"];
  [self willChangeValueForKey:@"person"];
  _city = cityString;
  [self didChangeValueForKey:@"person"];
  [self didChangeValueForKey:@"city"];
}

. Конечным результатом будет сообщение NSFetchedResultsController, что объект связанного человека изменился, и клетка должна быть перерисована.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...