如何将书签添加到UITableView Cell&保存到CoreData?

时间:2015-11-09 16:34:13

标签: ios swift uitableview core-data cloudkit

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

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

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
   }

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

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

gyp: Undefined variable module_name in binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (C:\Users\LucaG.SEAV\AppData\Roaming
\npm\node_modules\nw-gyp\lib\configure.js:353:16)
gyp ERR! stack     at ChildProcess.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:820:
12)
gyp ERR! System Windows_NT 6.2.9200
gyp ERR! command "node" "C:\\Users\\LucaG.SEAV\\AppData\\Roaming\\npm\\node_modu
les\\nw-gyp\\bin\\nw-gyp.js" "rebuild" "--target=0.12.2"
gyp ERR! cwd C:\Sources\INT2292App\node_modules\serialport
gyp ERR! node -v v0.10.40
gyp ERR! nw-gyp -v v0.12.4
gyp ERR! not ok

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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