CoreData在Swift中使用自定义tableView单元格

时间:2016-04-10 12:27:50

标签: swift uitableview core-data swift2 xcode7

我首先要说的是我刚接触iOS编程,所以我提前道歉可能是一个糟糕的问题。所以我有一个UITableView,我的单元格有一个自定义类。在这个单元格中,我有两个标签,一个代表一个字符串数组,另一个代表一个整数数组。我完全迷失在CoreData上,但我尝试了一些代码并且它似乎有效,唯一的问题是标签出现在tableView的不同行。看看这张图片,您将有希望了解: My tableView

所以我想要的是“Godis”标签与“111”的标签位于同一行。我不知道为什么那里有一个“0”,我甚至没有将它添加到我前面提到的整数数组中。

这是tableView的类:

class tableViewController: UITableViewController {

var listItems = [NSManagedObject]()

var prisItems = [NSManagedObject]()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.


    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    let managedContext = appDelegate.managedObjectContext

    let fetchRequest = NSFetchRequest(entityName: "MinEntity")

    do {
        let results = try managedContext.executeFetchRequest(fetchRequest)

        listItems = results as! [NSManagedObject]
    }
    catch {
        print("error")
    }


    do {
        let results = try managedContext.executeFetchRequest(fetchRequest)

        prisItems = results as! [NSManagedObject]
    }
    catch {
        print("error")
    }


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func viewDidAppear(animated: Bool) {
    tableView.reloadData()
}


override func viewWillAppear(animated: Bool) {
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    let managedContext = appDelegate.managedObjectContext

    let fetchRequest = NSFetchRequest(entityName: "MinEntity")

    do {
        let results = try managedContext.executeFetchRequest(fetchRequest)

        listItems = results as! [NSManagedObject]


    }
    catch {
        print("error")
    }


    do {
        let results = try managedContext.executeFetchRequest(fetchRequest)

        prisItems = results as! [NSManagedObject]
    }
    catch {
        print("error")
    }



}


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

    return listItems.count

}



override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as? CDCell




   cell!.itemListLabel.text = listItems[indexPath.row].valueForKey("item") as? String



    cell?.prisListLabel.text = String(prisItems[indexPath.row].valueForKey("intItem")!)


    return cell!

}

这是我用来通过按下按钮将项目添加到tableView的代码(这是在另一个文件和类中):

@IBAction func addGodis(sender: AnyObject) {

    saveItem("Godis", itemToSave2: 111)
    print(listItems)
    print(prisItems)




}


@IBAction func addMat(sender: AnyObject) {
    saveItem("Mat", itemToSave2: 222)
    print(listItems)
    print(prisItems)


}



override func viewDidLoad() {


}



func saveItem(itemToSave : String, itemToSave2 : Int) {

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    let managedContext = appDelegate.managedObjectContext

    let entity = NSEntityDescription.entityForName("MinEntity", inManagedObjectContext: managedContext)

    let item = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)

    item.setValue(itemToSave, forKey: "item")

    do {

        try managedContext.save()

        listItems.insert(item, atIndex: 0)
    }
    catch{
        print("error")
    }


    let item2 = NSManagedObject(entity: entity!, insertIntoManagedObjectContext: managedContext)

    item2.setValue(itemToSave2, forKey: "intItem")

    do {

        try managedContext.save()

        prisItems.insert(item2, atIndex: 0)

    }

    catch {
        print("error")
    }
}

我之前也提到过,我的UITableViewCell有一个自定义类,但是,我的标签中只有IBOutlets,因此没有其他代码。

只是为了让我更清楚我真正想要的是什么: 如果您查看我链接的图像,您会看到“Godis”和“111”不在同一行。相反,那里有一个0,我不知道为什么它在那里。所以我想要的是在TableView的同一行上有“Godis”和“111”,并删除其中的“0”。 “0”甚至不应该在那里。

0 个答案:

没有答案