我在处理核心数据NSManagedObjectContext
方面遇到了问题。
我可以在NSManagedObject
中创建NSManagedObjectContext
,但我未能保存该值。
这是我得到的:
_lesson.title = _titleField.text;
int priority = [_priorityField.text intValue];
int difficulty = [_difficultyField.text intValue];
int time = [_timeField.text intValue];
int sortIndex = 0;
if ( time == 0 )
{
sortIndex = 101;
}
else
{
sortIndex = priority * ( difficulty / time );
}
_lesson.priority = [NSNumber numberWithInt:priority];
_lesson.difficulty = [NSNumber numberWithInt:difficulty];
_lesson.time = [NSNumber numberWithInt:time];
_lesson.sortIndex = [NSNumber numberWithInt:sortIndex];
NSError* error = nil;
[[(AppDelegate*)[[UIApplication sharedApplication] delegate] managedObjectContext] save:&error];
保存前的所有内容都完美无缺,我使用NSLog
来验证每个值是否真的保存在_lesson
中。
_lesson
从这里发送:
if ( [[segue identifier] isEqualToString:@"addLesson"] )
{
LessonViewController* destination = [[LessonViewController alloc]init];
Lesson* lesson = (Lesson*)[NSEntityDescription insertNewObjectForEntityForName:@"Lesson" inManagedObjectContext:_managedObjectContext];
destination.lesson = lesson;
}
else if ( [[segue identifier] isEqualToString:@"editLesson"] )
{
LessonViewController* destination = [[LessonViewController alloc]init];
NSIndexPath* index = [_tableView indexPathForCell:(UITableViewCell*)sender];
[_managedObjectContext deleteObject:[_lessonArray objectAtIndex:index.row]];
Lesson* lesson = (Lesson*)[_lessonArray objectAtIndex:index.row];
destination.lesson = lesson;
}
调试两个小时后,我找不到我的错误。请帮忙!
我将在下面提供完整的代码:
https://www.dropbox.com/sh/eu62ie9svbbqdmm/u1hYUICfjy
这是我的完整源代码。 (我复制并粘贴并创建了一个混乱。所以,Dropbox!)
提前致谢。
答案 0 :(得分:1)
这一行看起来很可疑:
[_managedObjectContext deleteObject:[_lessonArray objectAtIndex:index.row]];
删除 Lesson 对象,然后将其传递给LessonViewController
,这样保存上下文就会从商店中删除该对象,而不是保存(修改过的)对象,就像你一样可能是有意的。
在我看来,您应该只删除代码中的那一行。
已添加:您的prepareForSegue
方法出错:您使用
LessonViewController* destination = [[LessonViewController alloc]init];
相反,您必须使用seque的目标视图控制器:
LessonViewController *destination = [segue destinationViewController];