在添加/删除CoreData元素的过程中,SwiftUI TabView会显示一条错误消息



我目前正尝试将TabView用于CoreData的旋转木马视图(PageTabViewStyle(。

当我按以下顺序添加新页面时,不会出现错误。名称:3,页面名称:4,页面名称5

但是,如果我把一个数字放在第一个/中间的顺序,比如page.name:2 ,就会出现错误

如果我把page.name:6放进去,那么没有错误,Alphabet也一样。b c d e->放入";f";,没问题,但把";a";错误

关闭应用程序并打开应用程序后,我会看到更新的(添加页面/删除页面(ContentView。

我想,TabView有排序问题,所以我试图对CoreData的列表进行排序,将LifeCycle更改为SwiftUI,但错误一再发生。我也试过使用Firebase,但问题相同。

错误消息:

"libc++abi: terminating with uncaught exception of type NSException
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to delete item 1 from section 0 which only contains 1 items before the update'
terminating with uncaught exception of type NSException"  

ContentVIew

TabView() {
ForEach(pages, id: .self) { page in
SubPage(whichPage: page)
}
}
.tabViewStyle(PageTabViewStyle())
.indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .always))

添加页面

let page = Page(context: self.moc)
page.name = pageName
do {
print("page.name: (page.name ?? "Unknown")")
try self.moc.save()

} catch {
print(error)
}

子页面

@FetchRequest(entity: Page.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: Page.name, ascending: true)]
) var pages: FetchedResults<Page>
var whichPage: FetchedResults<Page>.Element

使用VStack、HStack或List代替TabView可以很好地工作,没有任何问题。

最后,这个问题在Xcode 13&基于iOS 15!

完整代码

TabView {
ForEach(pages) { page in
SubPage(whichPage: page)
}
}
.tabViewStyle(PageTabViewStyle())

TabView {
ForEach(pages) { page in
SubPage(whichPage: page)
}
}
.tabViewStyle(.page)

最新更新