Индекс за пределами границ / EXC_BAD_ACCESS по основным данным Удалить SwiftUI - PullRequest
0 голосов
/ 29 апреля 2020

Я получаю ошибку Index Beyond Bounds и Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT) при попытке удалить индекс базовых данных в SwiftUI.

По сути, у меня есть сущность базовых данных (Dates), содержащая только атрибут date (ограничение - строка). Это имеет отношение один ко многим с моей Records сущностью. Я пытаюсь отобразить список всех date, которые у меня есть. Отображение в порядке, но при попытке удалить мое приложение вылетает.

Мой вид в настоящее время выглядит следующим образом:

import SwiftUI

struct Settings: View {
    @Environment(\.managedObjectContext) var managedObjectContext
    @FetchRequest(entity: Dates.entity(), sortDescriptors: []) var dates: FetchedResults<Dates>


    var body: some View {
            VStack {
                List{
                ForEach(dates, id: \.self) { day in
                    Text("\(day.wrappedDate)")
                }.onDelete { (indexSet) in
                let dateToDelete = self.dates[indexSet.first!]
                self.managedObjectContext.delete(dateToDelete)
                do {
                    try self.managedObjectContext.save()
                } catch {
                    print(error)
                }
                }
                }
        }
    }
}

Я разбил свой вид до минимума, чтобы увидеть если это поможет, но, к сожалению, нет.

При попытке удалить. Ошибка, которую я получаю в выводе:

2020-04-29 16:08:23.980755+0300 TESTTEST[28270:2245700] [General] *** -[__NSArray0 objectAtIndex:]: index 0 beyond bounds for empty NSArray

Если я скажу 9 дат, это скажет index 8 beyond bounds [0 .. 7], так что это не обязательно связано с пустым массивом.

Дальнейший вывод:

=== AttributeGraph: cycle detected through attribute X ===

несколько раз, а затем:

Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)

в моем AppDelegate.

Может ли проблема быть в создании представления, а не в удалении?

Пожалуйста, имейте в виду, что я самоучка, абсолютный нуб, когда дело доходит до кодирования, поэтому я могу упустить что-то очевидное здесь. Любая помощь в получении ответа самостоятельно в форме инструкций также будет принята с благодарностью (поэтому я могу узнать, как это исправить).

РЕДАКТИРОВАТЬ:

I кажется, я узнал, что является причиной проблемы. В другом представлении я также генерирую список всех date с, где я применяю индекс для Dates. Изменим код сейчас, чтобы увидеть, исправит ли это ....

TB C!

1 Ответ

0 голосов
/ 01 мая 2020

В отдельном представлении я вызывал список дат следующим образом:

ForEach(0 ..< self.dates.count, id: \.self) { index in
       Text("\(self.dates[index].date)")
}

Удаление одного из объектов Date приведет к путанице в индексах, представленных в этом представлении. Изменение этой структуры на приведенное ниже исправило проблему:

ForEach(self.dates, id: \.self) { day in
Text("\(day.date)")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...