Справка по основам CoreData - PullRequest
0 голосов
/ 29 ноября 2010

EDIT : Я изменил NSPredicate в соответствии с рекомендациями, чтобы мой код выборки выглядел так. Распечатав в UITextView вот так, при нажатии load выдает следующее:

<NSManagedObject: 0x1c7cf0>(entity: DatedText; id: 0x1420c0 <x - coredata://B52D4F88-0210-4AE2-9DA6-C05ED64FE389/DatedText/p12> ; data: <fault>)

Так что либо данные не получаются, поскольку они не были сохранены / загружены правильно, либо я пытаюсь получить загруженный результат в UITextView неправильным способом. Есть идеи?

NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
    NSEntityDescription *testEntity = [NSEntityDescription entityForName:@"DatedText" inManagedObjectContext:self.managedObjectContext];
    [fetch setEntity:testEntity]; 
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"dateSaved == %@", datePicker.date];
    [fetch setPredicate:pred];

    NSError *fetchError = nil;
    NSArray *fetchedObjs = [self.managedObjectContext executeFetchRequest:fetch error:&fetchError];
    if (fetchError != nil) {
        NSLog(@" fetchError=%@,details=%@",fetchError,fetchError.userInfo);
        return nil;
    }
    NSString *object = [NSString stringWithFormat:@"%@",[fetchedObjs objectAtIndex:0]];
    noteTextView.text = object;

У меня возникали всевозможные проблемы, связанные с использованием Core Data, поэтому я вернулся к основам, новому оконному ipad-проекту с использованием основных данных.

Я добавил вид и код, который не работает, хе-хе. Я в основном пытаюсь сохранить какой-то текст на дату, затем при возвращении к этой дате снова будет показан ранее сохраненный текст.

Ответы [ 4 ]

3 голосов
/ 29 ноября 2010

На сайте разработчиков iPhone есть руководство здесь . И есть несколько примеров кодов с Core Data. Это должно начать вас.

2 голосов
/ 30 ноября 2010

Я проверил ваш проект и, кроме необходимости синтезировать свойства CoreData, я также заметил, что вы пытаетесь назначить NSArray для вашего предиката fetch, но он на самом деле ожидает объект NSPredicate.Вместо этого вы должны использовать это:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(dateSaved == %@)", datePicker.date];
[fetch setPredicate:pred];

Если вы хотите установить более 1 предиката, вы должны сделать это в вашей строке предиката, т.е.

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(dateSaved == %@) AND (dateSaved <= %@", datePicker.date, [NSDate date]];

Cheers, Rog

0 голосов
/ 30 ноября 2010

Вы устанавливаете предикат NSFetchRequest для NSArray, а не для NSPredicate.

Если вы опубликовали фактический сбой, вероятно, будет сказано, что неизвестный селектор был отправлен в экземпляр NSArray.

0 голосов
/ 29 ноября 2010

Скорее всего, у вас сбой, потому что ваш ивар равен managedObjectContext_, но вы используете self.managedObjectContext.Вам также необходимо синтезировать основные данные ivars, даже если вы предоставляете пользовательский метод получения.

...