iPhone, базовые данные, предикат с проблемой «я» - PullRequest
1 голос
/ 12 февраля 2010

Мне нужно перезагрузить Person NSManagedObject, прежде чем я передам его следующему представлению.

Это потому, что используемый мной fetchedResultsController возвращает только подмножество атрибутов, и мне нужен полный набор в следующем представлении.

Пока что я пытаюсь что-то вроде:

- (void)tableView:(UITableView *)tableViewPassed didSelectRowAtIndexPath:(NSIndexPath *)indexPath {        
        Person *partialPerson = (Person *)[self.fetchedResultsController objectAtIndexPath:indexPath];

   NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:[partialPerson.managedObjectContext]];

    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
    [request setEntity:entity];
...

Теперь я не могу получить предикат для правильной работы, пока я пытался:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF == %@", partialPerson];

и

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF == %@", partialPerson.objectID];

Но ни один из них, похоже, не работает. Что я здесь не так делаю? Это хороший подход?

Заранее спасибо за любые предложения, Matt

Ответы [ 2 ]

1 голос
/ 12 февраля 2010

Вам просто нужно получить доступ к атрибутам, которые не являются ошибочными, и они будут повреждены автоматически. Вам не нужно повторно доставлять объект вообще.

Обновление

Хранение изображений или любых двоичных данных в Базовых данных имеет несколько основных правил:

< 100kb store it in the same entity
< 1 mb store it in a separate entity on the other end of a relationship
> 1 mb store it on disk and reference it in the same entity

Похоже, вы храните слишком много двоичных данных в первичной таблице. Чтобы исправить это, следуйте приведенному выше правилу, и оно решит вашу проблему.

Но это не отменяет мой первоначальный ответ: вы можете дать указание своему извлечению извлечь атрибуты1, атрибут3 и атрибут 5, и когда вам понадобится для доступа к атрибуту 3, вы просто получите к нему доступ, и Core Data будет " делать правильные вещи "и загрузить его, когда вы пытаетесь получить к нему доступ. В такой ситуации нет причины «перезагружать» объект.

0 голосов
/ 12 февраля 2010

Зачем вам нужно повторно получать частичную персону?

Просто перейдите к следующему виду, и все готово! Вы можете делать все, что вы хотите с переменной variablePerson в следующем представлении. Я не вижу причин, по которым вам нужно это повторно.

myViewController.myPartialPerson = partialPerson;
...