2017-02-16 63 views
0

我从Web服务中获取数据。从这个数据,我已经通过以下命令创建管理对象:在Swift中用核心数据保存一个特定对象

let videoTitle = snippet["title"] as! String 
let videoDescription = snippet["description"] as! String 
let videoThumbnail = ((snippet["thumbnails"] as! NSDictionary)["default"] as! NSDictionary)["url"] as! String 
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { 
    return 
} 
let managedContext = appDelegate.persistentContainer.viewContext 
let entity = NSEntityDescription.entity(forEntityName: "YTVideo", 
             in: managedContext)! 
let video = YTVideo(entity: entity, insertInto: managedContext) 
video.videoID = videoID 
video.videoTitle = videoTitle 
video.videoDescription = videoDescription 
video.videoThumbnail = videoThumbnail 
video.isFavorite = false 
ytVideos.append(video) 

在代码中,ytVideos是一个数组。 现在用户可以选择保存对象。如果他选择保存对象,我希望把它变成持久性存储使用命令:

managedContext.save() 

然而,这将节省我创建的所有对象。 如何保存特定对象? 当然,我总是可以创建另一个模型,让用户使用该模型的对象进行游戏,然后使用YTVideo这个模型作为核心数据,但是为了简单起见,我只想为我的应用程序使用一个模型。我该怎么做? 非常感谢。

+0

只创建那些你想保存其他对象的核心数据对象应该只是类对象。 –

回答

0

保存一个对象的简单方法是创建一个子托管的对象上下文,然后在该上下文中创建您的特定对象。现在,除非您在父上下文中调用保存,否则它不会真正保存到持久存储中。如果您确实希望独立于所有其他对象,请创建一个对等上下文。从同行节省将推到商店。也就是说,您需要将这些值读入上下文才能使用它们。

+0

如何创建对等管理的上下文?我试过使用'newBackgroundContext()',但它似乎不工作。如果我使用'viewContext',它总是指向相同的托管上下文。 – lenhhoxung

+0

对等上下文是使用相同的持久存储并在您的首选项的队列中的对等上下文。由于上下文可以有许多独特的参数,所以我不能编写代码来实例化一个新的上下文。 – adonoho