Заполните свойство CoreData ManagedObject на основе другого свойства объекта - PullRequest
0 голосов
/ 04 июля 2010

У меня есть приложение, которое хранит древовидную структуру в CoreData. Существует ManagedObject, «Item», и он имеет атрибуты:

  • itemId (строка)
  • Элемент списка
  • заголовок (строка)
  • parentId (строка)
  • родитель (отношение к предмету)
  • parentTitle (строка)

parentId указывает на другой объект Item.

Как сделать так, чтобы свойство parentTitle автоматически заполнялось заголовком родительского элемента?

Ответы [ 2 ]

1 голос
/ 04 июля 2010

Хотя предложение Мартина является хорошим решением для производных ценностей, мой вопрос на ваш вопрос: зачем вам это?Вы вообще не манипулируете значением со стороны родителя.Поскольку вы просто получаете к нему доступ, обращайтесь к родителю напрямую через KVC, например:

Item *item = ...;
NSString *title = [item valueForKeyPath:@"parent.title"];
//Do something with title

Единственный раз, когда вы захотите использовать функциональность keyPathsForValues..., это если вы что-то меняете на основе этого значения.Если вы просто обращаетесь к нему, используйте KVC напрямую.

1 голос
/ 04 июля 2010

Это возможность для достижения желаемой функциональности:

// implement in Item.m
// manages KVO notifications
+ (NSSet *)keyPathsForValuesAffectingParentTitle
{
    return [NSSet setWithObjects:@"parent.title", nil];
}

// getter for parentTitle
- (NSString*) parentTitle
{
    return [self valueForKeyPath:@"parent.title"];
}

дополнительно объявить свойство для parentTitle как только для чтения в Item.h Нет необходимости объявлять атрибут Core Data «parentTitle».

Единственная проблема, которую я вижу с этим решением, заключается в следующем:

  • Элемент A является родителем элемента B
  • А превращается в ошибку
  • B все еще активен, и некоторое представление привязано к B.parentTitle

Представление получает уведомление из-за зависимости, объявленной с помощью keyPathsForValuesAffecting, но объект A уже поврежден (и при выключении не может быть снова отменен) автоматически ли Core Data решает такие проблемы и наблюдения?

...