2013-12-09 6 views
0

У меня есть контроллер для добавления записи данных ядра. Основное имя объекта данных - 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]); 
    } 

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

ответ

0

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

в YourAppDeleagte.h

+(YourAppDeleagte*)sharedManagedContext; 

в YourAppDeleagte.m

+(YourAppDeleagte*)sharedManagedContext{ 

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

в viewController.m

#import «YourAppDelegate.h»

@property(nonatomic,retain)NSmanagedObjectContext *managedObjectContext; 

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    self.managedObjectContext=[YourAppDelagete shareManagedContext].managedObjectContext;   
} 
+0

Спасибо @DineshKumar, но что означают символы + (... *)? – mvasco

+0

+ (void) методA метод класса - (void) методB это метод экземпляра – DineshKumar

+0

Вы имеете в виду добавление этой строки в мой AppDelegate.h: - (void) sharedManagedContext; – mvasco

1

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

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

+0

Спасибо @ Дана Шелли. – mvasco

1

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

+0

Спасибо @quellish. – mvasco

Смежные вопросы