我正在尝试创建一个收藏夹页面。我如何让用户单击一个表视图中的图像,然后将他们单击的表视图的数据传输到另一个页面中的另一个表查看?
@IBAction func favoritesSelected(sender: AnyObject)
{
if toggleState == 1
{
sender.setImage(UIImage(named:"Star Filled-32.png"),forState:UIControlState.Normal)
isFav = true
var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
var context:NSManagedObjectContext = appDel.managedObjectContext
var newFave = NSEntityDescription.insertNewObjectForEntityForName("Favorites", inManagedObjectContext: context) as NSManagedObject
newFave.setValue("" + nameLabel.text!, forKey: "favorite")
do
{
try context.save()
}
catch _
{
print("error")
}
//print("(newFave)")
print("Object saved")
toggleState = 2
}
从上面的代码中,您可以看到当用户单击收藏夹按钮时会发生什么。图像发生变化,并将名称上传到核心数据中。
我正试图让它转到另一个表视图单元格类,这样当它转到收藏夹页面时,收藏夹的名称就已经在那里了。
我会展示我在那节课上的表现,但我确信这是错误的。
if (result == 2)
{
var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
var context:NSManagedObjectContext = appDel.managedObjectContext
var request = NSFetchRequest(entityName: "Favorites")
request.returnsObjectsAsFaults = false
do
{
var results:NSArray = try context.executeFetchRequest(request)
if (results.count <= 0)
{
print("Either all object deleted or error")
}
}
catch _
{
print("error")
}
}
else
{
print("no show")
}
选项1:NSNotification触发tableView重载:
使用通知注册UITableView tableView
:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "contextDidSave:", name: NSManagedObjectContextDidSaveNotification, object: nil)
func contextDidSave(sender: NSNotification) {
tableView.reloadData()
}
在第一个例子中,用户点击星号并正确保存上下文后,contextDidSave
回调将被执行,tableView
将在DB 中加载最新状态
选项2:使用NSFetchedResultsController设置UITableView
使用此选项,一旦用户单击星号并保存上下文,iOS将自动触发对所选单元格的更新。请参阅本文以供参考:
https://developer.apple.com/library/ios/documentation/CoreData/Reference/NSFetchedResultsController_Class/
在我最喜欢的函数应用程序中,我做了以下操作:
1) 在我的模型中,对象有一个名为"收藏夹"的BOOL属性,默认值为false。
2) 在列出所有对象的表视图中,当用户点击收藏夹按钮时,将相应模型对象的收藏夹属性设置为true,并保存托管对象上下文。
3) 在您希望显示喜爱对象的表视图中,使用一个为true的喜爱属性查询所有模型对象的核心数据,并显示这些结果。正如Christopher Harris的回答中所提到的,如果您是一个使用NSFetchedResultController的用户,那么这是微不足道的。