Я пытаюсь абстрагировать некоторые компоненты на более мелкие части. Для этого я создал следующий листинг:
struct ArticleList: View {
var fetchRequest: FetchRequest<Article>
var results: FetchedResults<Article> { fetchRequest.wrappedValue }
init() {
fetchRequest = FetchRequest<Article>(
entity: Article.entity(),
sortDescriptors: []
)
}
var body: some View {
ForEach(results) { article in
Text(article.name ?? "")
}
}
}
Теперь у меня есть контейнер, который будет отображать компонент списка, а также некоторые дополнительные вещи, если будут выполнены условия внутри дочерних компонентов:
struct Container: View {
var body: some View {
let articleList = ArticleList2()
return Group {
if articleList.results.isEmpty {
Text("Add")
}
articleList
}
}
}
Моя проблема теперь в том, что код аварийно завершает работу со следующим исключением:
Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
При дальнейшей отладке консоль дает мне следующий отзыв:
(lldb) po self.results
error: warning: couldn't get required object pointer (substituting NULL): Couldn't load 'self' because its value couldn't be evaluated
Отладка po self.fetchRequest
работает и он содержит экземпляр экземпляра FetchRequest<Article>
. po self.fetchRequest.wrappedValue
выдает ту же ошибку, что и self.results
.
У кого-нибудь есть идея, почему этот код вызывает сбой и каким может быть возможное решение?
Спасибо.