ユーザーが後で選択しない限り、オブジェクトを保存したくないので、nil マネージド オブジェクト コンテキストで NSManagedObject のインスタンスを作成しています。
これを行うには、コンテキストを使用してエンティティの説明を作成し、コンテキストを使用せずにオブジェクト自体を作成します。これを以下に示します。
NZVideo *video = nil;
if ([[tempVideo objectForKey:_kResponseVideoTypeKey] isEqualToString:_kVideoTypeYouTube] == YES)
{
NSEntityDescription *entityDescription = [NZYouTubeVideo entityDescriptionInContext:[NSManagedObjectContext contextForCurrentThread]];
video = (NZVideo *)[[NSManagedObject alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:nil];
[(NZYouTubeVideo *)video setVideoId:[media objectForKey:_kResponseVideoIdKey]];
}
else if ([[tempVideo objectForKey:_kResponseVideoTypeKey] isEqualToString:_kVideoTypeS3] == YES)
{
NSEntityDescription *entityDescription = [NZS3Video entityDescriptionInContext:[NSManagedObjectContext contextForCurrentThread]];
video = (NZVideo *)[[NSManagedObject alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:nil];
[(NZS3Video *)video setAbsoluteVideoUrl:[media objectForKey:_kResponseVideoUrlKey]];
}
[video setTitle:title];
[video setSummary:summary];
[video setDurationValue:duration];
if (tempThumbnails != nil)
{
NSString *smallThumbnail = [tempThumbnails objectForKey:_kResponseVideoThumbnailSmallKey];
if (smallThumbnail != nil)
{
NSEntityDescription *entityDescription = [NZThumbnail entityDescriptionInContext:[NSManagedObjectContext contextForCurrentThread]];
NZThumbnail *thumbnail = (NZThumbnail *)[[NSManagedObject alloc] initWithEntity:entityDescription insertIntoManagedObjectContext:nil];
[thumbnail setAbsoluteImageUrl:smallThumbnail];
[thumbnail setAbsoluteSizeValue:NZThumbnailSizeSmall];
[video addThumbnailsObject:thumbnail];
}
}
if (video != nil)
{
[videos addObject:video];
}
次に、オブジェクトを保存する場合は、それらを管理対象オブジェクト コンテキストに追加します。オブジェクトが関係を持つすべてのオブジェクトも追加します。
[MagicalRecord saveUsingCurrentThreadContextWithBlock:^(NSManagedObjectContext *context) {
id _video = nil;
if ([video isKindOfClass:[NZYouTubeVideo class]])
{
_video = (NZYouTubeVideo *)video;
}
else if ([video isKindOfClass:[NZS3Video class]])
{
_video = (NZS3Video *)video;
}
if (((NSManagedObject *)_video).managedObjectContext == nil)
{
[context insertObject:_video];
}
for (NZThumbnail *thumbnail in ((NZVideo *)_video).thumbnails)
{
[context insertObject:thumbnail];
}
[playlist addVideosObject:video];
}
completion:^(BOOL success, NSError *error) {
if (error != nil)
{
DDLogVerbose(@"%@", error);
}
}];
ただし、アプリを再起動すると、オブジェクトは Core Data に追加されていますが、オブジェクトのすべてのプロパティはnull
.
なぜこれが起こるのか、どうすればプロパティを保存できるのか知っている人はいますか? 前述のとおり、オブジェクトは存在します。それらは永続化されますが、すべてのプロパティは null です。
違いはないと思いますが、エンティティの作成、保存、取得にはMagicalRecordを使用しています。