を更新していない配列要素の名前は私がNSFetchedResultsControllerの簡単な使用法を持っていることは、この不自然な例のようなものを定義し、彼らが持っているクラスでのセクションにグループ化された学生のエンティティを表示するには、テーブルビューを助けNSFetchedResultsControllerのセクションが正しく
let request: NSFetchRequest<StudentEntity> = StudentEntity.fetchRequest()
request.sortDescriptors = [
NSSortDescriptor(key: "class.name", ascending: true, selector: #selector(NSString.localizedCaseInsensitiveCompare(_:)))
]
fetchedResultsController = NSFetchedResultsController<StudentEntity>(
fetchRequest: request,
managedObjectContext: context,
sectionNameKeyPath: "class.name",
cacheName: nil)
彼らのクラス関係に設定されています。クラスエンティティにはname属性があり、sectionNameKeyPathはclass.nameです。
生徒が参照するクラスを編集すると、テーブルのデータをリロードしようとしましたが、残念ながら私が使っていたセクション名が更新されていないことがわかりました。多くのデバッグでは、もちろんクラスエンティティが正常に更新されていることがわかりますが、何らかの理由でセクション[]。nameが更新されていません。正しく
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
{
let sectionInfo = fetchedResultsController!.sections![section]
let sectionTitle = sectionInfo.name
let sectionStudentEntity = sectionInfo.objects![0] as! StudentEntity
let sectionTitleFromStudent = sectionStudentEntity.class!.name!
しかしsectionTitleが更新されませんを実行し、sectionTitleFromStudentとして正しく古いクラス名を表示するには、次のデータ・ソースの方法を起こし
classEntity.name = newClassName
do
{
try context.save()
}
catch let error
{
dbgLog("failed to save context; error=\(error)")
}
tableView.reloadData();
を次のように私は、クラス名を更新します更新された新しいクラス名が表示されます。
sectionNameKeyPathはネストされたパスであり、クラスエンティティは更新されていますが、fetchedResultsControllerは何らかの形で学生エンティティ自体の変更を検出しないため、これらのセクション名を再作成しないためです。バグのような感じですが、うまくいけば、正しく更新されたsectionTitleFromStudent文字列を使用して回避できます。
誰もがアイデアを持っている、または同じ問題を抱えている人は誰ですか?
乾杯
'reloadData'の前に' performFetch'をやってみましたか? – pbasdf
私はそれを試していなかったし、それを試して実際に問題を修正しました。私は、それがリンクされているエンティティだけの依存関係を検出することはできませんね。ありがとうございました。あなたが答えとしてそれを載せたいなら、私はそれを受け入れます。乾杯! – jimbobuk