我目前正尝试将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)