Получение SIGABRT при выполнении fetchRequest - PullRequest
0 голосов
/ 03 марта 2012

Я использую Xcode 4.2 и iOS SDK 5.0 и шаблон приложения Apple Master-Detail для iPad с базовыми данными. Это похоже на пример кода "Locations". Мне удалось передать контекст управляемого объекта (MOC) из MasterViewController (MVC) в DetailViewController (DVC). Контроллер подробного представления принимает ввод от пользователя в некоторых текстовых полях и сохраняет их в основных данных; эта часть работает как шарм. Теперь у меня есть ActionViewController (AVC), который представляет собой Popover View, который должен позволять пользователю отправлять по электронной почте все данные в MOC, если они того пожелают. Тем не менее, при попытке сделать выборку я получаю SIGABRT. Я использовал точки останова, чтобы точно определить, где:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    //Fetch the crosses
    NSManagedObjectContext *context = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event"
                                                          inManagedObjectContext:context]; 
    [fetchRequest setEntity:entity]; // Where it crashes

    //Other code
}

Кроме того, в отладчике я вижу, что * указатель контекста равен 0x0, что, как я предполагаю, означает, что его там нет?

То, как я проходил MVC, проходило так:

// Pass the managedObjectContext to the DetailViewController as a property
_detailViewController.managedObjectContext = self.managedObjectContext;

//Pass the MOC to the actionViewController
_actionViewController.managedObjectContext = self.managedObjectContext;

Я посмотрел другие посты, и кажется, что передача MOC всем контроллерам представления из AppDelegate может быть подходящим способом, но я хотел выяснить, почему ввод данных работает для DVC, но происходит сбой при получении данных. в АВК. Какую большую ошибку я совершил?

Исправлена ​​ссылка на проект github: https://github.com/scottdaniel/fly_punnett

1 Ответ

0 голосов
/ 05 марта 2012

Так что я понял это, хотя я, вероятно, нарушаю принцип "хорошего программирования" ...

Все, что я сделал, это удалил

//Pass the MOC to the actionViewController
_actionViewController.managedObjectContext = self.managedObjectContext;

вместе со всеми другими соединениями от AVC до MVC (т. Е. @Class ActionViewController, @property * ActionViewController в интерфейсе MCV) << спросите у меня полную информацию, если вы хотите их, или проверьте это на github (ссылка выше) </p>

Тогда я просто добавил

#import AppDelegate.h

на мой ActionViewController.m

и изменил создание MOC следующим образом:

-(void)tableView:(UITableView *)tableView 
                  didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Fetch the crosses
NSManagedObjectContext *context = [(AppDelegate *)[[UIApplication 
                                    sharedApplication] delegate] 
                                    managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription 
                               entityForName:@"Event"
                               inManagedObjectContext:context];

MOC успешно создан, и я могу взять данные для пользователя и поместить их в электронное письмо, которое они могут отправить кому угодно.

...