微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUI TabView 在添加/删除 CoreData 元素期间给出错误消息

如何解决SwiftUI TabView 在添加/删除 CoreData 元素期间给出错误消息

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

错误不会发生,当我添加一个页面时,像这样 age.name: 3,page.name: 4,page.name: 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"  

内容视图

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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。