Entities:
- Video
- Playlist item
- Playlist
Relationship:
- Video is optional for many for a playlist item, and the delete rule is nullify
- List of playlists - for many, at least one element of the playlist, and the deletion rule is nullify
- A playlist item is required for one for the video, and a delete rule is nullify
- The playlist item is required for one for the playlist, and the deletion rule is nullify.
In the Playlist object, I did not find the connection / set playlistItem. Instead, I have an undefined transition attribute called "video", which is an array of Video objects generated by sorting a set of playlist items. There are no links between the playlist and the Video objects.
I am having problems saving a modified instance of a playlist in the context of a managed entity.
From the .m playlist (subclass of NSManagedObject):
- (BOOL)validatePlaylistItems:(NSSet **)playlistItems error:(NSError **)outError
{
NSArray *currentVideos = [self videos];
NSArray *persistedVideos = [self videosFromPlaylistItems];
if ([currentVideos isEqual:persistedVideos]) {
return YES;
}
NSManagedObjectContext *context = [self managedObjectContext];
for (FHPlaylistItem *pi in *playlistItems) {
[context deleteObject:pi];
}
NSArray *videos = [self primitiveVideos];
NSUInteger count = [videos count];
for (int i = 0; i < count; i++) {
FHPlaylistItem *pi = [FHPlaylistItem playlistItemWithVideo:[videos objectAtIndex:i]
forIndex:i
insertIntoManagedObjectContext:[self managedObjectContext]];
[self addPlaylistItemsObject:pi];
[pi setPlaylist:self];
}
return YES;
}
What I'm trying to do here is only updating the set of playlist items when the MOC needs to be saved, since you see that the operation is expensive - O (N * 2). When you first launch the application, MOC saves only a fine. However, subsequent changes to the video attribute in Core Data lead to many errors:
Core Data: annotation: repairing missing delete propagation for to-many relationship playlistItems on object <FHPlaylist: 0x6c27eb0> (entity: Playlist; id: 0x6c26d40 <x-coredata:
accountID = 0;
lastFetched = "2012-03-31 20:05:08 +0000";
name = Featured;
playlistID = 1441335931001;
playlistItems = (
"0x6c34be0 <x-coredata:///PlaylistItem/t9EAFBC87-5E16-4053-984F-881CCD9C1F0B2>",
"0x6c34320 <x-coredata://BCB69D8E-8393-4A2A-AF5D-0AA1872CE2B4/PlaylistItem/p16>",
"0x6c310c0 <x-coredata:///PlaylistItem/t9EAFBC87-5E16-4053-984F-881CCD9C1F0B3>",
"0x6c35570 <x-coredata:///PlaylistItem/t9EAFBC87-5E16-4053-984F-881CCD9C1F0B5>",
"0x6c34ca0 <x-coredata:///PlaylistItem/t9EAFBC87-5E16-4053-984F-881CCD9C1F0B6>",
"0x6c34310 <x-coredata://BCB69D8E-8393-4A2A-AF5D-0AA1872CE2B4/PlaylistItem/p8>",
"0x6c28a90 <x-coredata:///PlaylistItem/t9EAFBC87-5E16-4053-984F-881CCD9C1F0B4>",
"0x6c34350 <x-coredata://BCB69D8E-8393-4A2A-AF5D-0AA1872CE2B4/PlaylistItem/p29>",
"0x6c34220 <x-coredata://BCB69D8E-8393-4A2A-AF5D-0AA1872CE2B4/PlaylistItem/p2>",
"0x6c34330 <x-coredata://BCB69D8E-8393-4A2A-AF5D-0AA1872CE2B4/PlaylistItem/p20>",
"(...and 1 more...)"
);
playlistType = 0;
referenceID = OKFFeaturedPlaylist;
shortDescrip = "This is so descriptive! OMG!";
thumbnailURL = nil;
videos = "(...not nil..)";
}) with bad fault 0x6c34320 <x-coredata:
Core Data: annotation: repairing missing delete propagation for to-many relationship playlistItems on object <FHPlaylist: 0x6c27eb0> (entity: Playlist; id: 0x6c26d40 <x-coredata:
accountID = 0;
lastFetched = "2012-03-31 20:05:08 +0000";
name = Featured;
playlistID = 1441335931001;
playlistItems = (
"0x6c34be0 <x-coredata:///PlaylistItem/t9EAFBC87-5E16-4053-984F-881CCD9C1F0B2>",
"0x6c310c0 <x-coredata:///PlaylistItem/t9EAFBC87-5E16-4053-984F-881CCD9C1F0B3>",
"0x6c35570 <x-coredata:///PlaylistItem/t9EAFBC87-5E16-4053-984F-881CCD9C1F0B5>",
"0x6c34ca0 <x-coredata:///PlaylistItem/t9EAFBC87-5E16-4053-984F-881CCD9C1F0B6>",
"0x6c34310 <x-coredata://BCB69D8E-8393-4A2A-AF5D-0AA1872CE2B4/PlaylistItem/p8>",
"0x6c28a90 <x-coredata:///PlaylistItem/t9EAFBC87-5E16-4053-984F-881CCD9C1F0B4>",
"0x6c34350 <x-coredata://BCB69D8E-8393-4A2A-AF5D-0AA1872CE2B4/PlaylistItem/p29>",
"0x6c34220 <x-coredata://BCB69D8E-8393-4A2A-AF5D-0AA1872CE2B4/PlaylistItem/p2>",
"0x6c34330 <x-coredata://BCB69D8E-8393-4A2A-AF5D-0AA1872CE2B4/PlaylistItem/p20>",
"0x6c34340 <x-coredata://BCB69D8E-8393-4A2A-AF5D-0AA1872CE2B4/PlaylistItem/p27>"
);
playlistType = 0;
referenceID = OKFFeaturedPlaylist;
shortDescrip = "This is so descriptive! OMG!";
thumbnailURL = nil;
videos = "(...not nil..)";
}) with bad fault 0x6c34310 <x-coredata:
Etc. Etc. Etc.
, . " ", , nullify . ? . Apple Core , Video Playlist, .
Cascade -
, , Core Data .
for (FHPlaylistItem *pi in *playlistItems) {
[pi setVideo:nil];
[pi setPlaylist:nil];
[context deleteObject:pi];
}
a > : , . ( , ?)