如何将书签添加到 UITableViewCell 并保存到核心数据?

Posted

技术标签:

【中文标题】如何将书签添加到 UITableViewCell 并保存到核心数据?【英文标题】:How to add bookmarkt to UITableView Cell & save to CoreData? 【发布时间】:2015-11-09 16:34:12 【问题描述】:

我有一个关于向 UITableView 添加书签/收藏按钮的问题。目前我的 mainVC 有一个从 CloudKit 中的公共数据库填充的 tableView。如果我想添加一个书签/收藏按钮,用户可以在其中将该行的数据保存到 CoreData(字符串对象、图像、布尔类型)中......我该如何执行?

我将按钮添加为 UITableViewCell 的插座。在 cellForRow 中,我添加了

cell.favoriteButton.tag = indexPath.row

然后我向该 MainVC 添加了一个@IBAction addFavorites,但我不确定如何将所有对象从该行保存到 CoreData?

这是我保存到 Core Data 的方法:

if let managedObjectContext = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext

   place = NSEntityDescription.insertNewObjectForEntityForName("Place", inManagedObjectContext: managedObjectContext) as! Place
   place.name = name!
   place.type = type!
   place.address = address!
   place.neighborhood = neighborhood!
   place.phoneNumber = phoneNumber!
   if let placeImage = imageView.image
   
      place.image = UIImagePNGRepresentation(placeImage)
   
   do 
      try managedObjectContext.save()
    catch 
      print(error)
      return
   

有什么建议吗?

【问题讨论】:

为什么不使用 parse.com 来保存对象? 【参考方案1】:

首先,我认为使用标签不是一个好主意。要使用按钮识别一行,请使用以下方法:

let point = button.convertPoint(CGPointZero, toView: tableView)
let indexPath = tableView.indexPathForRowAtPoint(point)!

其次,您从哪里获取变量?在您的代码中,您似乎正在使用与单元格关联的属性。这也不是一个好主意,因为您不应该使用视图来读取数据 - 而是使用原始 CloudKit 数据源。

第三,不建议将图像存储在 Core Data 中,除非它只是一个小缩略图。如果它更大,请使用外部存储,在您的应用程序文档文件夹中设计方案或从 CloudKit 按需下载。

最后,不清楚您还需要什么。我想您想在表格视图中显示收藏状态。如果您可以包含某种唯一标识符,您可以在您的核心数据对象集中检查cellForRowAtIndexPath 中是否存在此标识符并相应地标记单元格。

【讨论】:

以上是关于如何将书签添加到 UITableViewCell 并保存到核心数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UIViewController/UITabBar 添加到 UITableViewCell?

如何将目标操作添加到 UITableViewCell

如何将多个项目添加到 UITableViewCell?

如何将图像添加到uitableviewcell

如何将 stackViews 添加到 UITableViewCell?

如何将子视图添加到情节提要中的自定义 UITableViewCell