gpt4 book ai didi

ios - NSManagedObject 上的属性为空

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:42 24 4
gpt4 key购买 nike

我正在 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

有谁知道为什么会发生这种情况以及如何让它存储属性?如前所述,对象存在。它们会保留,但所有属性都为空。

我认为这没有任何区别,但我使用 MagicalRecord创建、保存和检索实体。

最佳答案

不要这样做。我以前回答过同样的问题:-)

你应该:

保存所有必需的值和变量,然后在用户按下“保存”时创建并插入托管对象并保存上下文。

或者:

创建对象并将其插入到上下文中。保留对对象的引用并在用户输入信息时更新它们。如果用户按下保存,则保存上下文。如果用户按下取消,则只需删除该对象。

您不应该在未将托管对象插入上下文的情况下创建它。这真的没有意义。

另请参阅此答案 iPhone Core Data: Initializing Managed Object without a context

关于ios - NSManagedObject 上的属性为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14201204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com