Обновление базового объекта данных при изменении свойства связанного с ним объекта - PullRequest
1 голос
/ 04 декабря 2010

Я все еще привыкаю к ​​тому, как работают Core Data, и я искал информацию о своей проблеме, но я не нашел ответов, которые явно касаются моей точной проблемы.

У меня есть три классауправляемых объектов: кредит, заемщик и фото.Объекты заемщика имеют отношение «один ко многим» с объектами ссуды (это означает, что заемщик может иметь более одного ссуды, но ссуда может иметь только одного заемщика).Объекты-заемщики также имеют непосредственное отношение к объекту фотографии.

Я использую NSFetchedResultsController, чтобы обновлять таблицу с учетом изменений в наборе объектов ссуды.Когда другие свойства заемщика изменяются, уведомление об изменении достигает NSFetchedResultsController и моя таблица обновляется.Но когда свойство photo изменяется, чтобы указывать на другой объект фотографии, уведомление NSFetchedResultsController не передается.Кажется, что ни один из займов, связанных с заемщиком, не сообщается, когда заемщик меняет свои фотоотношения.

Пожалуйста, помогите!

Ответы [ 2 ]

2 голосов
/ 04 декабря 2010

Вы можете попытаться обработать уведомление NSManagedObjectContextObjectsDidChangeNotification.

0 голосов
/ 04 декабря 2010

Это немного коротко, но вы можете сделать следующее, предполагая, что у вас есть подкласс NSManagedObject для классов Loan, Borrower и Photo.

1.) В разделе «Заем» настройте KVO для свойства «image» для фотографии займа.

2.) В Loan добавьте свойство changeCount (NSNumber *).

3.) Когда ссуде сообщают об изменении изображения фотографии, увеличивают changeCount.

Итак, в очень грубом коде, что-то вроде этого:

в Load.m:

- (void) awakeFromFetch
    {
    [super awakeFromFetch];

    [[self photo] addObserver:self
        forKeyPath:@"image"
        options:NSKeyValueObservingOptionNew
        context:nil];
    }


- (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
    {
    if ([keyPath isEqualToString:@"image"])
        {
        NSInteger temp = [[self changeCount] intValue];
        ++temp;
        [self setChangeCount:[NSNumber numberWithInteger:temp]];
        }
    }

Есть несколько предостережений.

1) Это касается только 'fetch', а не , а 'insert' (т.е. новые кредиты).

2) Предполагается, что у извлеченного кредита будет фото.

3) Предполагается, что вы добавили свойство «changeCount» в Loan.

4) Я не проверял это, хотя использую удаленно похожие механизмы в одном из своих приложений.

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