【问题标题】:CoreData using custom tableView cell in SwiftCoreData 在 Swift 中使用自定义 tableView 单元格
【发布时间】:2016-04-10 12:27:50
【问题描述】:

首先我想说我是 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,我不知道它为什么在那里。所以我想要的是将“Godis”和“111”放在 tableView 的同一行,并删除其中的“0”。 “0”甚至不应该在那里。

【问题讨论】:

    标签: swift uitableview core-data swift2 xcode7


    【解决方案1】:

    你得到双行,因为你做了两个插入而不是一个。您没有配置第二个,因此从逻辑上讲,它显示一个空标签和一个带有0 的标签。

    您未显示的代码中可能存在其他错误。无论如何,使用两个数组来驱动表格视图是不明智的。

    您应该使用NSFetchedResultsController,而不是两个数组。要开始查看 Xcode 模板“Master-Detail”提供的代码。

    【讨论】:

    • 谢谢,那我去了解一下NSFetchedResultsController!
    猜你喜欢
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多