以一个名称将多个对象保存到 coredata
Posted
技术标签:
【中文标题】以一个名称将多个对象保存到 coredata【英文标题】:saving multiple objects to coredata, under a single name 【发布时间】:2017-05-08 06:12:15 【问题描述】:我正在 swift 3.0 中开发一个项目,其中我有一个带有多个选择选项的UITableView
(每行都有一个 URL)。因此,在UITableView
的顶部使用可以在 UITextfield 中输入名称。我的要求是一旦选择了这些行,数据应该保存在输入名称下的Coredata
中。截至目前,数据已保存为单独的元素,因此我在以它的名称聚类数据时遇到了麻烦。我怎么能做到这一点???。我保存和提取数据的方法如下。
保存
public static func savePlaylistDetails(audio:AudioDetails, playListName: String)
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let newPlaylist = NSEntityDescription.insertNewObject(forEntityName: PlayList_DETAILS_ENTITY, into: context)
newPlaylist.setValue(playListName, forKey:"playlistName");
newPlaylist.setValue(audio.mediaId, forKey:"trackID");
do
try context.save();
print("Saved.....")
catch
print("There was an error")
获取保存的数据
public static func getPlayList() -> [PlayListDetails]?
let appDelegate = UIApplication.shared.delegate as! AppDelegate;
let context = appDelegate.persistentContainer.viewContext;
let request = NSFetchRequest<NSFetchRequestResult>(entityName: PlayList_DETAILS_ENTITY)
request.returnsObjectsAsFaults = false
do
let results = try context.fetch(request)
if(results.count > 0 )
for result in results as! [NSManagedObject]
let playListDetails:PlayListDetails? = result as? PlayListDetails
print("Title: \(playListDetails?.playlistName)")
return results as? [PlayListDetails]
else
print("No results")
catch
print("Error in fetching items")
return nil;
【问题讨论】:
是否允许更改字段的数据类型?如果是,那么您可以将数据类型更改为 NSData,然后您可以将字符串数组保存在一个字段中。 对于 swift 步骤的新手和代码 sn-p 将不胜感激? 【参考方案1】:创建一个字典并使用正确的键将所有字段保存在字典中。然后将dict转换为数据并保存在coreData中 正在保存..
let data = NSKeyedArchiver.archivedData(withRootObject: dictionary)
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let newPlaylist = NSEntityDescription.insertNewObject(forEntityName: PlayList_DETAILS_ENTITY, into: context)
newPlaylist.setValue(data , forKey:"playlistData");
检索
先从CoreData中获取数据,再转成Dictionary。
let unarchivedDictionary = NSKeyedUnarchiver.unarchiveObject(with: data)
【讨论】:
以上是关于以一个名称将多个对象保存到 coredata的主要内容,如果未能解决你的问题,请参考以下文章