Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从模式视图重新加载背景UITableView_Ios_Swift - Fatal编程技术网

Ios 如何从模式视图重新加载背景UITableView

Ios 如何从模式视图重新加载背景UITableView,ios,swift,Ios,Swift,我试图在UITableViewCell上显示核心数据中的信息。 我可以得到信息,但信息没有显示在UITableViewCell上 当我在CoreData上设置信息时,我使用模态视图 我尝试使用UITableView.reload(),但无法显示UITableView单元格上的信息 当我从模态视图返回时,请让我知道如何显示信息 本课程是关于显示UItableView上的信息 import UIKit import CoreData protocol FriendListTableViewDele

我试图在UITableViewCell上显示核心数据中的信息。 我可以得到信息,但信息没有显示在UITableViewCell上

当我在CoreData上设置信息时,我使用模态视图

我尝试使用
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
    。它会在保存上下文时自动更新UI
  • 打开时,将新项插入数据源数组,并将新行插入表视图
  • 观察
    NSManagedObjectContextDidSaveNotification
    ,并按2所述插入项目
  • 重新蚀刻整个数据并重新加载表视图
  • 这些选择是按效率排序的。版本1是最有效的版本

    旁注:

    viewWithTag
    非常过时。你有插座,比如用它们

    cell.sampleLabel!.text = friends[indexPath.row].name
    

    当您使用额外的数据源数组时,只需重新加载表视图就不会考虑新插入项。

    有几个选择

  • 使用
    NSFetchedResultsController
    。它会在保存上下文时自动更新UI
  • 打开时,将新项插入数据源数组,并将新行插入表视图
  • 观察
    NSManagedObjectContextDidSaveNotification
    ,并按2所述插入项目
  • 重新蚀刻整个数据并重新加载表视图
  • 这些选择是按效率排序的。版本1是最有效的版本

    旁注:

    viewWithTag
    非常过时。你有插座,比如用它们

    cell.sampleLabel!.text = friends[indexPath.row].name
    

    谢谢你,先生。我正在尝试按版本1执行。我正在查苹果的参考资料。但我对苹果公司的参考没有任何意义
    let context=
    您能告诉我一些信息或建议吗?
    NSManagedObjectContext
    实例的占位符。请看(以及后面的部分)谢谢,先生。我正在尝试按版本1执行。我正在查苹果的参考资料。但我对苹果公司的参考没有任何意义
    let context=
    您能告诉我一些信息或建议吗?
    NSManagedObjectContext
    实例的占位符。请查看(以及后续部分)