Ios 如何从模式视图重新加载背景UITableView
我试图在UITableViewCell上显示核心数据中的信息。 我可以得到信息,但信息没有显示在UITableViewCell上 当我在CoreData上设置信息时,我使用模态视图 我尝试使用Ios 如何从模式视图重新加载背景UITableView,ios,swift,Ios,Swift,我试图在UITableViewCell上显示核心数据中的信息。 我可以得到信息,但信息没有显示在UITableViewCell上 当我在CoreData上设置信息时,我使用模态视图 我尝试使用UITableView.reload(),但无法显示UITableView单元格上的信息 当我从模态视图返回时,请让我知道如何显示信息 本课程是关于显示UItableView上的信息 import UIKit import CoreData protocol FriendListTableViewDele
UITableView.reload()
,但无法显示UITableView单元格上的信息
当我从模态视图返回时,请让我知道如何显示信息
本课程是关于显示UItableView上的信息
import UIKit
import CoreData
protocol FriendListTableViewDelegate {
func reloadTable()
}
class FriendListViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, FriendListTableViewDelegate{
@IBOutlet weak var friendListTableView: UITableView!
var friends:[FriendBasicInfo] = []
override func viewDidLoad() {
super.viewDidLoad()
getData()
}
// Disable to effect the reload
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
reloadTable()
}
// fetch the information from CoreData
func getData() {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
do {
friends = try context.fetch(FriendBasicInfo.fetchRequest())
} catch {
print("error")
}
}
func reloadTable() {
friendListTableView.reloadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return friends.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let friendCell = tableView.dequeueReusableCell(withIdentifier: "FriendListCell") as! FriendListTableViewCell
let friendName = friendCell.viewWithTag(1) as? UILabel
let friendImage = friendCell.viewWithTag(2) as? UIImageView
friendName?.text = friends[indexPath.row].name
friendImage?.image = friends[indexPath.row].photo?.toImage()
return friendCell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 80
}
}
此类用于从CoreData获取信息
import UIKit
import XLPagerTabStrip
import Eureka
import CoreData
import ImageRow
class InputFriendInforViewController: FormViewController, IndicatorInfoProvider {
var itemInfo: IndicatorInfo = "Info"
var friendPhoto: UIImage?
var friendName: String = ""
var friendBirthday: Date?
var friendGender: String = ""
var friendListTableViewDelegate: FriendListTableViewDelegate!
override func viewDidLoad() {
super.viewDidLoad()
form +++
Section("Friend Information")
<<< ImageRow(){
$0.title = "Image"
$0.sourceTypes = [.PhotoLibrary, .SavedPhotosAlbum, .Camera]
$0.value = UIImage(named: "noImage")
$0.onChange { [unowned self] row in
self.friendPhoto = row.value!
}
}
<<< TextRow(){ row in
row.title = "Name"
row.placeholder = "Enter Name here"
}.onChange { name in
self.friendName = name.value!
}
<<< DateRow(){ row in
row.title = "Birthday"
row.value = Date(timeIntervalSinceReferenceDate: 0)
}.onChange {date in
self.friendBirthday = date.value!
}
<<< PushRow<String>(){row in
row.title = "Gender"
row.options = ["Male","Female","Other"]
}.onChange {gender in
self.friendGender = gender.value!
}
+++ Section()
<<< ButtonRow() {
$0.title = "SAVE"
}.onCellSelection {_, _ in
self.saveInfo()
}
}
// MARK: - IndicatorInfoProvider
func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo {
return itemInfo
}
// save friend Info for Core Data
func saveInfo (){
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let managedContext = appDelegate.persistentContainer.viewContext
let friendEntity = NSEntityDescription.entity(forEntityName: "FriendBasicInfo", in: managedContext)!
let friendInfo = NSManagedObject(entity: friendEntity, insertInto: managedContext)
// make unique user ID
let friendUid = NSUUID().uuidString
// Image Data UIImage to png Data
let pngImage = self.friendPhoto?.toPNGData()
friendInfo.setValue(friendUid, forKey: "userID")
friendInfo.setValue(pngImage, forKey: "photo")
friendInfo.setValue(self.friendName, forKey: "name")
friendInfo.setValue(self.friendBirthday, forKey: "birthday")
friendInfo.setValue(self.friendGender, forKey: "gender")
do {
try managedContext.save()
self.dismiss(animated: true, completion:nil)
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
}
}
V/r,您的FriendListViewController TableView将反映对在getData()方法中获取的任何FriendBasicInfo实体的任何更新。要向数据库显示新插入的FriendBasicInfo实体,必须使用getData()方法执行新的fetch 解决方案:
func reloadTable() {
getData()
friendListTableView.reloadData()
}
替代解决方案
可以使用委托对提取的实体进行高级监视,此控制器将自动更新FriendListViewController表视图以获取任何更新、插入或删除的实体。FriendListViewController表视图将反映在getData()方法中提取的任何FriendBasicInfo实体的任何更新。要向数据库显示新插入的FriendBasicInfo实体,必须使用getData()方法执行新的fetch 解决方案:
func reloadTable() {
getData()
friendListTableView.reloadData()
}
替代解决方案
可以用委托完成对已获取实体的高级监控,该控制器将自动更新FraceListVIEW控制器TabVIEW,用于任何已更新、插入或删除的实体。
< P>当您使用额外的数据源数组时,只需重新加载表视图就不考虑新插入项。 有几个选择NSFetchedResultsController
。它会在保存上下文时自动更新UINSManagedObjectContextDidSaveNotification
,并按2所述插入项目viewWithTag
非常过时。你有插座,比如用它们
cell.sampleLabel!.text = friends[indexPath.row].name
当您使用额外的数据源数组时,只需重新加载表视图就不会考虑新插入项。
有几个选择NSFetchedResultsController
。它会在保存上下文时自动更新UINSManagedObjectContextDidSaveNotification
,并按2所述插入项目viewWithTag
非常过时。你有插座,比如用它们
cell.sampleLabel!.text = friends[indexPath.row].name
谢谢你,先生。我正在尝试按版本1执行。我正在查苹果的参考资料。但我对苹果公司的参考没有任何意义
let context=
您能告诉我一些信息或建议吗?
是NSManagedObjectContext
实例的占位符。请看(以及后面的部分)谢谢,先生。我正在尝试按版本1执行。我正在查苹果的参考资料。但我对苹果公司的参考没有任何意义let context=
您能告诉我一些信息或建议吗?
是NSManagedObjectContext
实例的占位符。请查看(以及后续部分)