我是使用 Swift 编码的新手,我一直在使用 Aaron Caines 提供的 Udemy 教程,非常棒。他所做的教程是使用 UITableViewController。
我有一个使用单个 UIViewController 的应用程序(只有一个 View ,它不是 UITableViewController)。我已经将 CoreData 加载到构建阶段。我已经能够验证数据是否保存在属性中,但由于某种原因,我无法将数据加载回 View Controller 中的两个文本框和一个 ImageView 中。
我在代码中添加了几个问题作为注释。
它应该像设置变量一样简单:
@IBOutlet var textName: UITextField!
@IBOutlet var descriptionName: UITextField!
@IBOutlet var imageView: UIImageView!
调用实体并使持久容器准备好加载和接收数据:
let pc = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
获取数据
var frc : NSFetchedResultsController = NSFetchedResultsController<NSFetchRequestResult>()
func fetchRequest() -> NSFetchRequest<NSFetchRequestResult> {
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "NamedEntity")
// DO I NEED A SORTER IF I'M NOT USING A TABLEVIEW?
//let sorter = NSSortDescriptor(key: "accounttext", ascending: false)
//fetchRequest.sortDescriptors = [sorter]
return fetchRequest
}
func getFRC() -> NSFetchedResultsController<NSFetchRequestResult> {
frc = NSFetchedResultsController(fetchRequest: fetchRequest(), managedObjectContext: pc, sectionNameKeyPath: nil, cacheName: nil)
//OCCASIONALLY THERE'S AN ISSUE WITH THE sectionNameKeyPath.
//THE ERROR INVOLVES TRYING TO "UNWRAP A NIL VALUE".
//IS THERE ANOTHER VALUE I SHOULD BE CONSIDERING?
return frc
}
每当 View 加载或出现时获取数据:
override func viewDidLoad() {
super.viewDidLoad()
frc = getFRC()
frc.delegate = self
do {
try frc.performFetch()
}
catch {
print(error)
return
}
// WHAT DO I USE HERE IF I'M NOT USING A TABLEVIEW?
self.tableView.reloadData()
}
override func viewDidAppear(_ animated: Bool) {
frc = getFRC()
frc.delegate = self
do {
try frc.performFetch()
}
catch {
print(error)
return
}
// WHAT DO I USE HERE IF I'M NOT USING A TABLEVIEW?
self.tableView.reloadData()
}
然后将其加载到适当的框中:
//THIS IS WHERE THINGS GET STUCK
// HOW DO I CALL THE ATTRIBUTES OF MY ENTITY AND UPDATE MY VARIABLES IF I'M NOT USING A TABLEVIEW?
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! cellAccountTableViewCell
let item = frc.object(at: indexPath) as! Entity
cell.nameText.text = item.accounttext
cell.descriptionText.text = item.amounttext
cell.imageView.image = UIImage(data: (item.image)! as Data)
return cell
}
我只有 2 个文本框和 1 个 ImageView 。在过去的三天里,我花了几十个无用的论坛主题和无数的 YouTube 视频来寻找这个答案,但似乎每个人都提供了有关使用 TableView Controller 的教程。
我发现的最有用的东西是 Electronic Armory 的视频。这帮助我理解了实体、属性和持久容器的结构。它还涉及数据库的关系方面。
https://www.youtube.com/watch?v=da6W7wDh0Dw
我可以在一 (1) 个 UIViewController 上使用核心数据吗?如果可以,我如何调用数据并将其加载到适当的字段中?如果需要更多信息,请告诉我。
我真的很想了解核心数据流程。我错过了什么,或者我对加载过程不了解什么?任何帮助将不胜感激!
谢谢
卢克
最佳答案
I have an app that uses a single UIViewController (ONLY ONE VIEW and it's not a UITableViewController).
I only have 2 text boxes and 1 image view.
假设从获取中只返回一个实体(否则你将如何显示所有实体?),可能是这样的:
// WHAT DO I USE HERE IF I'M NOT USING A TABLEVIEW?
//self.tableView.reloadData()
if let fetchResult = frc.fetchedObjects{
if let item = fetchResult.first as? Entity{
textName.text = item.accounttext
descriptionName.text = item.amounttext
imageView.image = UIImage(data: (item.image)! as Data)
}
}
关于ios - 如何将属性数据从实体加载到单个 (1) UIViewController 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42843202/