如何将数据从一个表视图单元格传输到另一个表格单元格?

时间:2016-05-01 21:51:50

标签: ios swift uitableview

我正在尝试创建收藏页面。如何让用户在一个表视图中单击图像,然后将他们单击的表视图中的数据传输到另一个页面中的另一个tableview?

@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")
    }

2 个答案:

答案 0 :(得分:1)

选项1:NSNotification触发tableView重新加载:

向UITableView tableView注册通知:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "contextDidSave:", name: NSManagedObjectContextDidSaveNotification, object: nil)

func contextDidSave(sender: NSNotification) {
    tableView.reloadData()
}

用户点击第一个示例中的星号并正确保存上下文后,将执行contextDidSave回调,tableView将加载数据库中的最新状态

选项2:使用NSFetchedResultsController设置UITableView

使用此选项,一旦用户点击星标并保存上下文,iOS将自动触发对所选单元格的更新。请参阅此文章以供参考:

https://developer.apple.com/library/ios/documentation/CoreData/Reference/NSFetchedResultsController_Class/

答案 1 :(得分:0)

在我喜欢的功能的应用程序中,我做了以下几点:

1)在我的模型对象上有一个名为favorite的BOOL属性,默认值为false。

2)在列出所有对象的表视图中,当用户点击收藏夹按钮时,将相应模型对象的favorite属性设置为true并保存您的托管对象上下文。

3)在您希望显示受欢迎对象的表视图中,使用true属性查询所有模型对象的核心数据并显示这些结果。正如Christopher Harris的回答中所提到的,如果您使用的是NSFetchedResultController,这是微不足道的。