2017-03-16 48 views
0

我是使用Swift进行编码的新手,我一直在使用Aaron Caines的Udemy教程,这一直很棒。他所做的教程是使用UITableViewController。我有一个使用单个UIViewController(只有一个视图,它不是一个UITableViewController)的应用程序。我已经将CoreData加载到构建阶段。我已经能够验证数据保存在属性中,但出于某种原因,我无法将数据加载回视图控制器中的两个文本框和一个图像视图。如何将实体中的属性数据加载到单个(1)UIViewController中?

我在代码中提出了几个问题作为注释。

它应该是为建立变量一样简单:

@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 

    } 

当视图加载或出现时获取数据:

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个的图像视图。我花了最近三天的时间搜集了几十个毫无用处的论坛主题和无数YouTube视频,但似乎每个人都给出了关于使用表格视图控制器的教程。

最有有用我发现的东西是电子军械库的视频。这帮助我了解了Entity(i),attrubutes和persistentContainer的结构。它还涉及数据库的关系方面。

https://www.youtube.com/watch?v=da6W7wDh0Dw

我可以使用一(1)单一的UIViewController核心数据,如果是这样,我怎么调用数据并将其加载到相应的字段?让我知道是否需要更多信息。

我真的很想了解核心数据过程。我错过了什么,或者我不了解加载过程?任何帮助,将不胜感激!

感谢,

卢克

回答

0

我有一个使用一个单一的UIViewController一个应用程序(只有一个视图,它不是一个UITableViewController)。

我只有2个文本框和1个图像视图。

假设只有一个从提取返回的实体(否则你将如何显示它们?),可能是这样的:

// 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) 
    } 

} 
+0

谢谢。我会玩这个,让你知道我找到了什么。 – Luke

相关问题