使用CoreData

时间:2017-03-20 19:13:18

标签: ios iphone swift core-data uicollectionview

我正在尝试显示包含文本的集合视图单元格,此文本从CoreData中检索并设置如下:

var tasks : [Task] = []

override func viewDidLoad() {
    super.viewDidLoad()
    self.myCollView.delegate = self
    self.myCollView.dataSource = self

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext // This one causes blank cell
    let tasker = Task(context:context) // Causes blank cell

    tasker.pid = idVar // Causes blank cell

    var hello = tasker.pid

    print("In next view")
    print(hello!)
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return tasks.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "connectCell", for: indexPath) as! MyCollectionViewCell

    let task = tasks[indexPath.row]

    cell.labelTe?.text = task.name

    self.myCollView.backgroundColor = UIColor.clear
    cell.layer.cornerRadius = 25

    cell.tag = indexPath.row

}

func getData() {

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    do {
    tasks = try context.fetch(Task.fetchRequest())
    }

    catch {
     print("Get Data failed")
    }

    // Fetches data.

}

这是集合视图的创建方式,但是在上一个视图控制器中,我有一个prepareForSegue函数,它将一个字符串发送到当前视图控制器中的一个变量,该变量被保存到同一个CoreData实体下的另一个属性中,如下所示:

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    let tasker = Task(context:context)
    tasker.pid = idVar // idVar is the variable that stores the string

    print(tasker.pid!)

问题发生在我运行应用程序时,我点击前一个视图控制器中的集合视图单元格并转到当前视图控制器但是它显示一个没有文本的空白集合视图单元格,当我返回并单击时在上一个视图控制器单元格上,并且segue到当前视图控制器,然后还有另一个空白集合视图单元格。

我发现错误来自viewDid加载中的行,之后我添加了注释。当我删除这3行时,问题就消失了,虽然我需要将idVar的值分配给tasker.pid。我不知道如何在没有错误的情况下做到这一点。我觉得错误来自numberOfItemsInSection,因为它引用Task实体而不是name属性。但是我无法指定属性。有谁知道如何解决这个问题?

0 个答案:

没有答案