首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >核心数据xcode 8崩溃

核心数据xcode 8崩溃
EN

Stack Overflow用户
提问于 2017-04-14 20:57:08
回答 1查看 106关注 0票数 0

我在IOS swift Xcode 8中遇到了一个问题

设置核心数据后,在插入任何垃圾数据以测试fetch函数之前,应用程序运行正常,没有崩溃和数据,但在我插入数据后,应用程序崩溃并显示以下消息

代码语言:javascript
运行
复制
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UITableViewCell 0x7f9b26054c00> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key Deatials.

以下是我的代码

代码语言:javascript
运行
复制
//

import UIKit
import CoreData

       // the NSFetchedResultsControllerDelegate needed to start woring    in all the function for datacore

     class MainVC: UIViewController , UITableViewDelegate,   UITableViewDataSource,NSFetchedResultsControllerDelegate{

// definning the main view the table and the segment.

@IBOutlet weak var TableView: UITableView!
@IBOutlet weak var segment: UISegmentedControl!

// need to difine the NSFetchedResultsController to define the remaining 3 functions for the tableview
var controller : NSFetchedResultsController<Item>!

override func viewDidLoad() {
    super.viewDidLoad()

    generateTeseData()
    attemptFetch()

    TableView.dataSource = self
    TableView.delegate = self
}


// we need to define 3 main fucntions for the table view

func numberOfSections(in tableView: UITableView) -> Int {

    if let sections = controller.sections{
        return sections.count
    }
    return 0
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    // need to difine number of rows in section by NSFetchedResultsController
    if let sections = controller.sections{
        let sectionInfo = sections[section]
        return sectionInfo.numberOfObjects
    }
    return 0
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    // linking the cell var with the class of itemCell been created in the View Folder
    let cell = tableView.dequeueReusableCell(withIdentifier: "CellItem", for: indexPath) as! ItemCell

    // function been created below:
    configureCell(cell: cell, indexPath: indexPath as NSIndexPath)
    return cell
}


func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 150
}

func configureCell (cell:ItemCell, indexPath: NSIndexPath){
    let item = controller.object(at: indexPath as IndexPath)
    cell.ConfigureCellsInCellclass(item: item)

}


func attemptFetch () {
    let fetchrequest:NSFetchRequest<Item> = Item.fetchRequest()
    let datesort = NSSortDescriptor(key: "created", ascending: false)
    fetchrequest.sortDescriptors = [datesort]

    let controller = NSFetchedResultsController(fetchRequest: fetchrequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)

    self.controller = controller

    do{
       try controller.performFetch()

    }catch{
        let error = error as NSError
        print("\(error)")
    }

}

// these two function for the update in the tableview
func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
    TableView.beginUpdates()
}
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
    TableView.endUpdates()
}

//this function to preforme all the functions for the <Data Core>
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) {

    switch(type)
    {
    case.insert:
        if let indexpath = newIndexPath {
            TableView.insertRows(at: [indexpath], with: .fade)
        }
        break

    case.delete:
        if let indexpath = indexPath{
            TableView.deleteRows(at: [indexpath], with: .fade)
        }
        break

    case.update:
        if let indexpath = indexPath {
            let cell = TableView.cellForRow(at: indexpath) as! ItemCell
            configureCell(cell: cell, indexPath: indexPath! as NSIndexPath)
        }
        break
    case.move:
        if let indexpath = indexPath {
            TableView.deleteRows(at: [indexpath], with: .fade)

        }
        if let indexpath = indexPath {
            TableView.insertRows(at: [indexpath], with: .fade)
        }
        break
}
}

在这一点上,系统将cun没有任何崩溃,但当我在下面添加插入函数后,它开始崩溃

代码语言:javascript
运行
复制
func generateTeseData(){
    let item = Item(context: context)

    item.title = "IMAC"
    item.price = 2000
    item.details = "Soon"
}

这是我的视图单元文件

代码语言:javascript
运行
复制
class ItemCell: UITableViewCell {


// this view to take all the label from the view and link it here


@IBOutlet weak var thump: UIImageView!
@IBOutlet weak var Title: UILabel!
@IBOutlet weak var Price: UILabel!
@IBOutlet weak var Deatials: UILabel!


// using this function to set the values of the items with the labels been linked before in upper section

func ConfigureCellsInCellclass (item:Item){
    Title.text = item.title
    Price.text = ("$\(item.price)")
    Deatials.text = item.details
}
}

提前谢谢你们

EN

回答 1

Stack Overflow用户

发布于 2017-04-14 21:53:40

正如@Larme所说的,你的问题与IBOutlet有关,这不再反映在课堂上了。

断开损坏的插座

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43411997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档