0

Core Data の処理方法に問題がありますNSManagedObjectContext

で作成できますNSManagedObjectNSManagedObjectContext、値を保存できませんでした。

これが私が得たものです:

_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;
}

2 時間デバッグした後、エラーが見つかりません。助けてください!

以下に完全なコードを含めます。

https://www.dropbox.com/sh/eu62ie9svbbqdmm/u1hYUICfjy

それが私の完全なソースコードです。(コピペしてめちゃくちゃ作った。で、Dropbox!)

前もって感謝します。

4

1 に答える 1

1

この行は疑わしいようです:

[_managedObjectContext deleteObject:[_lessonArray objectAtIndex:index.row]];

おそらく意図したように、コンテキストを保存するとそのオブジェクトがストアから削除され、(変更された) オブジェクトは保存されないように、Lessonオブジェクトを に渡す前に削除します。LessonViewController

コード内のその行を削除するだけでよいように思えます。


追加:メソッドにエラーがあります: で新しいビュー コントローラーをprepareForSegue作成します。

LessonViewController* destination = [[LessonViewController alloc]init];

代わりに、シークの宛先ビュー コントローラーを使用する必要があります。

LessonViewController *destination = [segue destinationViewController];
于 2012-12-21T16:19:31.350 に答える