1

我目前正在尝试将 TabView 用于带有 CoreData 的轮播视图(PageTabViewStyle)。

当我按如下顺序添加新页面时,不会发生错误 age.name: 3, page.name: 4, page.name: 5

但是会发生错误,如果我在第一/中间顺序中输入一个数字,例如 page.name: 2

如果我输入 page.name: 6,则没有错误,它也与 Alphabet 相同。bcde -> 放“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"  

内容视图

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 可以正常工作,没有任何问题。

4

1 回答 1

1

最后,这个问题在基于 Xcode 13 & iOS 15 的系统中得到了解决!

完整代码

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

或者

TabView {
    ForEach(pages) { page in
        SubPage(whichPage: page)
    }
}
.tabViewStyle(.page)
于 2021-06-08T15:33:14.683 回答