通过 CoreData 和委托在静态 tableView 单元格之间传递变量
Passing variables across static tableView cells via CoreData and delegates
我启用了 ConfigureTableViewController table视图,它有两个静态单元格用户和位置。
用户 tableview 单元格通过 usersSegue 连接到 ListUserTableViewController。
Locations tableview cell 通过 segue locationsSegue
连接到 LocationTableViewController
ListUserTableViewController 有一个协议:
protocol UserSelectionDelegate{
func userDidSelectUser(userIdentifier:NSString)
}
我 select 来自 ListUserTableViewController 的用户并将其传递给 ConfigureTableViewController,通过实现委托 UserSelectionDelegate
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 locationsSegue
发送到 LocationTableViewController
当我从 ListUserTableViewController 转换到 ConfigureTableViewController 时,我有用户名,但是当我离开 ConfigureTableViewController 并转到 LocationTableViewController 时,我失去了 fullName 的范围。
我必须以某种方式将计算出的全名的这个值存储在某个永久存储中,所以我应该把它放在 CoreData 的 table 中吗?我想避免这种情况,这似乎需要很多工作。
我能否使用某种委托链接,以便 LocationTableViewController 可以实现在 ConfigureTableViewController 中定义的委托,并从另一个已经实现并在其范围内具有 fullName 的 UserSelectionDelegate 中提取数据。
请指教,如何解决这个问题?
令人困惑的问题陈述:
I lose the scope of fullName
您需要保存对 User
对象的任何更改,并在下一个视图控制器中检索这些更改。如果下一个视图控制器使用相同的 NSManagedObjectContext
,您也可以只传递相同的 User
对象。
那么你就有了全名的所有数据。
这通常作为 User
class 的自定义方法实现,它检查自己的名字和姓氏以及 returns 格式正确的字符串。
我启用了 ConfigureTableViewController table视图,它有两个静态单元格用户和位置。 用户 tableview 单元格通过 usersSegue 连接到 ListUserTableViewController。 Locations tableview cell 通过 segue locationsSegue
连接到 LocationTableViewControllerListUserTableViewController 有一个协议:
protocol UserSelectionDelegate{
func userDidSelectUser(userIdentifier:NSString)
}
我 select 来自 ListUserTableViewController 的用户并将其传递给 ConfigureTableViewController,通过实现委托 UserSelectionDelegate
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 locationsSegue
发送到 LocationTableViewController当我从 ListUserTableViewController 转换到 ConfigureTableViewController 时,我有用户名,但是当我离开 ConfigureTableViewController 并转到 LocationTableViewController 时,我失去了 fullName 的范围。
我必须以某种方式将计算出的全名的这个值存储在某个永久存储中,所以我应该把它放在 CoreData 的 table 中吗?我想避免这种情况,这似乎需要很多工作。
我能否使用某种委托链接,以便 LocationTableViewController 可以实现在 ConfigureTableViewController 中定义的委托,并从另一个已经实现并在其范围内具有 fullName 的 UserSelectionDelegate 中提取数据。
请指教,如何解决这个问题?
令人困惑的问题陈述:
I lose the scope of fullName
您需要保存对 User
对象的任何更改,并在下一个视图控制器中检索这些更改。如果下一个视图控制器使用相同的 NSManagedObjectContext
,您也可以只传递相同的 User
对象。
那么你就有了全名的所有数据。
这通常作为 User
class 的自定义方法实现,它检查自己的名字和姓氏以及 returns 格式正确的字符串。