Получение ошибки после попытки сохранить запись основных данных

у меня есть контроллер представления, чтобы добавить запись основных данных. Имя объекта основных данных — FavoriteThings, атрибут — имя_вещи. У меня есть действие кнопки сохранения, называемое SaveButtonAction. Когда я нажимаю внутри кнопки, текст, вставленный в текстовое поле с именем ToDoTextField, должен быть сохранен, но приложение разбилось, показывая следующую ошибку журнала:

2013-12-09 12:30:07.488 Favorite Things[1701:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+entityForName: nil is not a legal NSManagedObjectContext parameter searching for entity name 'FavoriteThing'' 

Это код метода

- (IBAction)SaveButtonAction:(id)sender {
    FavoriteThing *newEntry = [NSEntityDescription insertNewObjectForEntityForName:@"FavoriteThing" inManagedObjectContext:managedObjectContext ];
    newEntry.thingName = self.ToDoTextField.text;
    NSError *error;
    if (![self.managedObjectContext save:&error])
    {
        NSLog(@"Whoops, couldn't save:%@",[error localizedDescription]);
    }

Спасибо за уделенное время..


person mvasco    schedule 09.12.2013    source источник


Ответы (3)


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

в YourAppDeleagte.h

+(YourAppDeleagte*)sharedManagedContext;

в YourAppDeleagte.m

  +(YourAppDeleagte*)sharedManagedContext{

     return (YourAppDeleagte *)[[UIApplication sharedApplication]delegate];
}

в viewController.m

#import "ВашAppDelegate.h"

@property(nonatomic,retain)NSmanagedObjectContext *managedObjectContext;

-(void)viewDidLoad{
   [super viewDidLoad];
   self.managedObjectContext=[YourAppDelagete shareManagedContext].managedObjectContext;         
 }
person DineshKumar    schedule 09.12.2013
comment
Спасибо @DineshKumar, но что означают символы +(...*)? - person mvasco; 10.12.2013
comment
+(void)methodA это метод класса -(void)methodB это метод экземпляра - person DineshKumar; 10.12.2013
comment
Вы имеете в виду добавление этой строки в мой AppDelegate.h: - (void) sharedManagedContext; - person mvasco; 10.12.2013

Вы не передаете свой NSManagedObjectContext в контроллер представления (ваш контекст nil).
Попробуйте сохранить на него сильную ссылку и инициализируйте свой контроллер представления с допустимым контекстом.

Если вы используете шаблонный код проекта CoreData, вы можете получить доступ к основному контексту через делегат вашего приложения: appDelegate.managedObjectContext

person Dan Shelly    schedule 09.12.2013

Он сообщает вам, что ваш параметр manageObjectContext имеет значение nil. Возможно, вы имели в виду [self managedObjectContext], который, как я предполагаю, является средством доступа, которое может быть «ленивым» созданием экземпляра контекста управляемого объекта, и на данный момент еще не вызывалось. Вы обращаетесь к переменной экземпляра непосредственно в коде, вызывающем исключение.

person quellish    schedule 09.12.2013