在Swift中使用多节TableView遇到麻烦

想要房间

如果造成混淆,我事先表示歉意。我是Swift的新手,没有任何经验和学习。

基本上,我有一个UITableView,它从具有四个文本字段的另一个viewController中提取其数据。数据将保存并添加到tableView中(仅显示单元格中的两个字段)。选择单元格后,它会返回到viewController并将数据添加到适当的文本字段中。这也利用了CoreData和NSFetchResultsController。到目前为止,所有这些都工作正常,只是想对发生的事情有所了解。

问题...我试图让tableView在两部分中显示数据。我希望第一部分(第0部分)显示添加到通过在viewController上添加文本字段而创建的列表的数据。但是,tableView将第一行添加为第一部分(标题正确),然后将第二行(继续)添加为第二部分(部分1)(具有部分标题)。我想将所有来自viewController的新项目添加到第0节,当我想出如何将项目从第0节中划掉并通过选择该行移至第1节时,将第1节留为空白(将来会出现)。

我也是这个网站的新手,无法弄清楚如何发布我的代码。如果有人需要浏览它,则可能需要引导我添加它。另外,我在将Objective C转换为Swift时遇到麻烦,请在回答时记住这一点。谢谢!!我为此感到抱歉。

(tableView控制器“ SList”)

class ShoppingList: UIViewController, NSFetchedResultsControllerDelegate, UITableViewDataSource, UITableViewDelegate { 

    let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

    var frc : NSFetchedResultsController = NSFetchedResultsController()

    func itemFetchRequest() -> NSFetchRequest{

        let fetchRequest = NSFetchRequest(entityName: "SList")
        let primarySortDescription = NSSortDescriptor(key: "slitem", ascending: true)
        let secondarySortDescription = NSSortDescriptor(key: "slcross", ascending: true)
        fetchRequest.sortDescriptors = [primarySortDescription, secondarySortDescription]
        return fetchRequest
    }

    func getFetchRequetController() ->NSFetchedResultsController{

        frc = NSFetchedResultsController(fetchRequest: itemFetchRequest(), managedObjectContext: moc, sectionNameKeyPath: "slitem", cacheName: nil)
        return frc
    }  

    @IBOutlet weak var tableView: UITableView!


    @IBAction func AddNew(sender: AnyObject) {

        frc = getFetchRequetController()
        frc.delegate = self

        do {
            try frc.performFetch()
        } catch _ {
            print("Failed to perform inital fetch.")
            return
        }
        self.tableView.reloadData()
    }

    override func viewDidLoad() {
        super.viewDidLoad()


        frc = getFetchRequetController()
        frc.delegate = self

        do {
            try frc.performFetch()
        } catch _ {
            print("Failed to perform inital fetch.")
            return
        }

        self.tableView.reloadData()

        //TableView Background Color
        self.tableView.backgroundColor = UIColor.clearColor()
        tableView.reloadData()
        self.navigationItem.leftBarButtonItem = self.editButtonItem()
        self.tableView.separatorColor = UIColor.blackColor()
    }

    override func viewDidDisappear(animated: Bool) {

        frc = getFetchRequetController()
        frc.delegate = self

        do {
            try frc.performFetch()
        } catch _ {
            print("Failed to perform inital fetch.")
            return
        }
        self.tableView.reloadData()
    }

    //TableView Data
    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        let managedObject:NSManagedObject = frc.objectAtIndexPath(indexPath) as! NSManagedObject
        moc.deleteObject(managedObject)
        do {
            try moc.save()
        } catch _ {
            print("Failed to save.")
            return
        }
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {

        let numberOfSections = frc.sections?.count
        return numberOfSections!
    }

    //table section headers
    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String?{
        let sectionHeader = "Items - #\(frc.sections![section].numberOfObjects)"
        let sectionHeader1 = "Crossed Off Items - #\(frc.sections![section].numberOfObjects)"
        if (section == 0) {
            return sectionHeader
        }
        if (section == 1){
            return sectionHeader1
        }else{
        return nil
    }
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        let numberOfRowsInSection = frc.sections?[section].numberOfObjects
        return numberOfRowsInSection!
    }


    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
        let items = frc.objectAtIndexPath(indexPath) as! SList
        cell.backgroundColor = UIColor.clearColor()
        cell.textLabel?.text = "\(items.slitem!) - Qty: \(items.slqty!)"
        cell.textLabel?.font = UIFont.systemFontOfSize(23)

        return cell
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


    func controllerDidChangeContent(controller: NSFetchedResultsController)      {
        tableView.reloadData()
    }
    //segue to add/edit
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

        if segue.identifier == "edit" {

            let cell = sender as! UITableViewCell
            let indexPath = tableView.indexPathForCell(cell)
            let SListController:SLEdit = segue.destinationViewController as! SLEdit
            let items:SList = frc.objectAtIndexPath(indexPath!) as! SList
            SListController.item = items
        }
    }
}

(ViewController“ SLEdit”)

class SLEdit: UIViewController {

    let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext


    @IBOutlet weak var slitem: UITextField!
    @IBOutlet weak var sldesc: UITextField!
    @IBOutlet weak var slqty: UITextField!
    @IBOutlet weak var slprice: UITextField!


    var item: SList? = nil


    override func viewDidLoad() {
        super.viewDidLoad()

        if item != nil{
            slitem.text = item?.slitem
            sldesc.text = item?.sldesc
            slqty.text = item?.slqty
            slprice.text = item?.slprice
        }

        // "x" Delete Feature
        self.slitem.clearButtonMode = UITextFieldViewMode.WhileEditing
        self.sldesc.clearButtonMode = UITextFieldViewMode.WhileEditing
        self.slqty.clearButtonMode = UITextFieldViewMode.WhileEditing
        self.slprice.clearButtonMode = UITextFieldViewMode.WhileEditing
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    func dismissVC() {
        navigationController?.popViewControllerAnimated(true)
    }

    @IBAction func saveButton(sender: AnyObject) {

        if item != nil {
            edititems()
        } else {
            createitems()
        }

        dismissVC()
    }


    func createitems() {

        let entityDescription = NSEntityDescription.entityForName("SList", inManagedObjectContext: moc)


        let item = SList(entity: entityDescription!, insertIntoManagedObjectContext: moc)

        item.slitem = slitem.text
        item.sldesc = sldesc.text
        item.slqty = slqty.text
        item.slprice = slprice.text

        if slitem.text == nil{
            createitems()

        }else{
            edititems()
        }



        do {
            try moc.save()
        } catch _ {
            return
        }
    }
    func edititems() {
        item?.slitem = slitem.text!
        item?.sldesc = sldesc.text!
        item?.slqty = slqty.text!
        item?.slprice = slprice.text!


        do {
            try moc.save()
        } catch {
            return
        }
    }
}
pbasdf

我认为问题出在您的FRC配置中:

frc = NSFetchedResultsController(fetchRequest: itemFetchRequest(), managedObjectContext: moc, sectionNameKeyPath: "slitem", cacheName: nil)

因为sectionNameKeyPathslitem,FRC为的每个不同值创建一个新部分slitem

如果该slcross属性用于指示该商品已从列表中划掉,则将其指定为sectionNameKeyPath

frc = NSFetchedResultsController(fetchRequest: itemFetchRequest(), managedObjectContext: moc, sectionNameKeyPath: "slcross", cacheName: nil)

您还需要修改提取请求的排序(必须排序,以便给定节中的所有项都在一起):

let primarySortDescription = NSSortDescriptor(key: "slcross", ascending: true)
let secondarySortDescription = NSSortDescriptor(key: "slitem", ascending: true)
fetchRequest.sortDescriptors = [primarySortDescription, secondarySortDescription]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在python中使用beautifulsoup遇到麻烦

来自分类Dev

在xtensor中使用xt :: where遇到麻烦

来自分类Dev

我在Excel中使用宏遇到麻烦

来自分类Dev

在Python中使用str(count)遇到麻烦

来自分类Dev

在使用pickerview选择填充tableview时遇到麻烦

来自分类Dev

在if语句中使用布尔方法遇到麻烦

来自分类Dev

在Django中使用自定义http标题遇到麻烦

来自分类Dev

在Rails中使用Foundation和Turbolinks遇到麻烦

来自分类Dev

在奇异果中使用pyo遇到麻烦

来自分类Dev

在R中使用Tidyverse分离数据时遇到麻烦

来自分类Dev

在Java中使用递归方法时遇到麻烦

来自分类Dev

在Laravel 4中使用Multi-Auth遇到麻烦

来自分类Dev

在奇异果中使用pyo遇到麻烦

来自分类Dev

在Vaadin中使用BeanItemContainer和TreeTable遇到麻烦

来自分类Dev

在ApplescriptObjc Xcode项目中使用Applescript遇到麻烦

来自分类Dev

在C#中使用委托时遇到麻烦

来自分类Dev

在where.not在rails中使用时遇到麻烦

来自分类Dev

在Spark中使用数据时遇到麻烦了吗?

来自分类Dev

在nodejs中使用grok模块时遇到麻烦

来自分类Dev

使用Github遇到麻烦

来自分类Dev

使用XPATH遇到麻烦

来自分类Dev

使用Swift初始化属性时遇到麻烦

来自分类Dev

在Swift中使用CGEventTapCreate麻烦和参数

来自分类Dev

在Swift中使用CGEventTapCreate麻烦和参数

来自分类Dev

使用指针时遇到麻烦

来自分类Dev

使用Java的FileChooser遇到麻烦

来自分类Dev

在Scalaz中使用自定义半组类时遇到麻烦

来自分类Dev

在Express / Node中使用过帐的表单数据时遇到麻烦

来自分类Dev

在C#中使用TryParse处理数据类型时遇到麻烦