Объект перемещен из массива, не сохраненного в Базовых данных - PullRequest
2 голосов
/ 28 января 2012

У меня есть приложение, которое отображает видео. Приведенный ниже код получает список видео (с использованием основных данных), фильтрует его только по тем видео, которые были просмотрены ранее, а затем находит следующее видео и добавляет его в список видео.

По сути, вместо того, чтобы показывать каждое видео, я просто показываю ранее просмотренные видео + то, которое вы должны просмотреть дальше.

videos = [[loader loadVideos] mutableCopy];

// Get only the viewed videos
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(viewed == YES)"];

NSMutableArray *viewedVideos = [[videos filteredArrayUsingPredicate:predicate] mutableCopy];

Video *lastWatchedVideo = [viewedVideos lastObject];
// The next video will be equal to the video order of the previous video (starting at 1 vs 0)
Video *todaysVideo = [videos objectAtIndex:[lastWatchedVideo.videoOrder intValue]];

[viewedVideos addObject:todaysVideo]; 

Все работает должным образом в пользовательском интерфейсе, за исключением того, что любые изменения объекта todaysVideo (например, пометка его как просмотренного) не сохраняются обратно в базу данных. Это потому, что я переместил его в другой массив?

1 Ответ

1 голос
/ 28 января 2012

Да, именно поэтому ваши изменения не сохраняются в основных данных.Вы создаете локальную копию основных данных и модифицируете ее.Это не будет отражено в основных данных.Измените свой код на это и посмотрите, работает ли он

videos = [loader loadVideos];//You get the videos from core data
// Get only the viewed videos
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(viewed == YES)"];
NSMutableArray *viewedVideos = [videos filteredArrayUsingPredicate:predicate];
Video *lastWatchedVideo = [viewedVideos lastObject];
// The next video will be equal to the video order of the previous video (starting at 1 vs 0)
Video *todaysVideo = [videos objectAtIndex:[lastWatchedVideo.videoOrder intValue]];
todaysVideo.viewed=YES;
//Now that you have modified it save the context
NSError *error=nil;
[context save:&error];
...