gpt4 book ai didi

swift - 核心数据和关系谓词

转载 作者:行者123 更新时间:2023-11-28 08:16:56 24 4
gpt4 key购买 nike

几个月前我开始使用 swift & core data 通常我已经在这个网站上找到了我的答案但是第一次我真的被“关系”和“谓词”困住了

我创建了第一个 View Controller ,其中包含一个由用户填充的 TableView ,这部分工作如我所愿。用户可以“点击”一个单元格并打开一个带有新 TableView 的新 View Controller ,我想用与用户点击的单元格相关的数据填充这个 TableView 。

我正在使用 CoreData 并且我设置了 2 个实体:“Compte”和“Operation”它们是一对多的关系(一个 compte 用于多个操作)

我在这里:

  • 当用户点击单元格时,我正在使用 segue 将“Compte”发送到第二个 View Controller :

    //继续

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    let guest = segue.destination as! OperationsViewController
    let indexPath = tableView.indexPathForSelectedRow
    let operation = fetchedResultController.object(at: indexPath!)
    guest.compteTestRelation = operation
    }
  • OperationsViewController 中我设置了这个变量:

    var compteTestRelation: Compte!
  • 为了测试我的数据,我创建了一个像这样的 FOR 循环和一个函数:

    for index in 1 ... 10 {

    let newOp = Operation(context: context)
    newOp.nom = "Test Compte \(index)"
    newOp.date = NSDate()
    newOp.moyenPaiement = "Test"

    compteTestRelation.addToRelationCompte(newOp) // RelationShip
    }

    do {
    try context.save()
    } catch {
    print(error.localizedDescription)
    }
  • 函数

    func displayOperation() {

    if let opList = compteTestRelation.relationCompte as? Set<Operation> {

    sortedOperationArray = opList.sorted(by: { (operationA:Operation, operationB:Operation) -> Bool in
    return operationA.date!.compare(operationB.date! as Date) == ComparisonResult.orderedAscending
    })
    print(sortedOperationArray)
    }
    }

在带有“print”的控制台中,它的工作方式与我希望的一样,取决于单元格是否被点击,print(sortedOperationArray) 是否出现

我现在的问题是如何用这些数据填充我的 TableView ,当我在我的 FetchResultController 中使用谓词时出现错误或空 TableView ,但在控制台中一切似乎都正常工作所以我认为关系没问题..

如果我不使用 PREDICATE,我可以用数据填充我的 TableView ,但我总是看到所有数据

我在 stackoverflow.com 上看到过其他类似的问题和答案,但目前没有任何效果。

谢谢! :)

最佳答案

我找到了另一种断言我的数据的方法,它现在对我有用

我在我的 OPERATION 实体中创建了一个名为“id”的新属性,当我创建我的数据时,我将这样的 ID 归为属性:

for index in 1 ... 10 {

let newOp = Operation(context: context)
newOp.nom = "Test Compte \(index)"
newOp.date = NSDate()
newOp.moyenPaiement = "Test"
newOp.id = "id123\(compteTestRelation.nom!)"

compteTestRelation.addToRelationCompte(newOp) // RelationShip
}

do {
try context.save()
} catch {
print(error.localizedDescription)
}

然后我在 FetchResultController 中这样预测我的数据:

func setupFetchedResultController () {

let operationsRequest: NSFetchRequest<Operation> = Operation.fetchRequest()
let sortDescriptor = NSSortDescriptor(key: "nom", ascending: true)
let keyPath = "id"
let searchString = "id123\(compteTestRelation.nom!)"
let operationsPredicate = NSPredicate(format: "%K CONTAINS %@", keyPath, searchString)

operationsRequest.returnsObjectsAsFaults = false
operationsRequest.sortDescriptors = [sortDescriptor]
operationsRequest.predicate = operationsPredicate


fetchedResultController = NSFetchedResultsController(fetchRequest: operationsRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)

do {
try fetchedResultController.performFetch()

} catch {
print(error.localizedDescription)
}

}

关于swift - 核心数据和关系谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42347739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com