通过 CoreData 和委托在静态 tableView 单元格之间传递变量

Posted

技术标签:

【中文标题】通过 CoreData 和委托在静态 tableView 单元格之间传递变量【英文标题】:Passing variables across static tableView cells via CoreData and delegates 【发布时间】:2017-01-01 22:25:50 【问题描述】:

我有一个启用了 ConfigureTableViewController 的 tableview,它有两个静态单元格用户和位置。 用户表视图单元通过 usersSegue 连接到 ListUserTableViewController。 Locations tableview 单元格通过 segue locationsSegue 连接到 LocationTableViewController

ListUserTableViewController 有一个协议:

    protocol UserSelectionDelegate
      func userDidSelectUser(userIdentifier:NSString)
    

我通过实现委托 UserSelectionDelegate 从 ListUserTableViewController 中选择用户并将其传递给 ConfigureTableViewController

    class ConfigureTableViewController: UITableViewController, UserSelectionDelegate 
    …
    …

    // function pulls user’s fullName from Core Data table based on userIdentifier
    func userDidSelectUser(userIdentifier : NSString) 
    var fetchedResults: [User] = []

    let context = (UIApplication.shared.delegate as AppDelegate).persistentContainer.viewContext

     userIdentifierString = userIdentifier

    do 

        fetchedResults = try context.fetch(User.fetchRequest())
    
    catch 
        print ("fetch task failed")
    
    if fetchedResults.count > 0 

        for user in fetchedResults
            let aUser:User = user
            if (aUser.uniqueId! == userIdentifierString as String) 
                let fullName = aUser.firstName! + " " + aUser.lastName!
                print("selected user full name: " + (fullName as String))
            
            else 
                continue
            
        
    



到目前为止一切顺利..

但是现在,我想从数据库中提取用户名并通过 segue 位置发送到 LocationTableViewController

当我从 ListUserTableViewController 转换到 ConfigureTableViewController 时,我有用户名,但是当我离开 ConfigureTableViewController 并转到 LocationTableViewController 时,我失去了 fullName 的范围。

我必须以某种方式将计算出的 fullName 的值存储在某个永久存储中,所以我应该将它放在 CoreData 中的表中吗?我想避免这种情况,这似乎需要做很多工作。

我可以使用某种委托链接,以便 LocationTableViewController 可以实现在 ConfigureTableViewController 中定义的委托,并从其他已经实现并在其范围内具有 fullName 的 UserSelectionDelegate 中提取数据。

请指教,如何解决这个问题?

【问题讨论】:

【参考方案1】:

令人困惑的问题陈述:

我失去了 fullName 的范围

您需要保存对User 对象的任何更改并在下一个视图控制器中检索这些更改。如果下一个视图控制器使用相同的NSManagedObjectContext,您也可以只传递相同的User 对象。

那么你就有了全名的所有数据。

这通常作为User 类的自定义方法实现,该方法检查自己的名字和姓氏并返回格式正确的字符串。

【讨论】:

我正在尝试同时传递一个用户 ID,因此我可以从数据库中获取用户名。您的回答给出了部分解决方案。但我会接受的。

以上是关于通过 CoreData 和委托在静态 tableView 单元格之间传递变量的主要内容,如果未能解决你的问题,请参考以下文章

CoreData:在返回 UITableView 之前重新加载数据

iOS 核心数据应用程序委托?

Java动态代理与静态代理的定义与区别??

UITableView 多个动作

什么是反射技术?什么是静态代理?什么是动态代理?什么是aop

ios-coredata:内存跟踪和完全持久跟踪有啥区别?