Невозможно удалить все текущие элементы базы данных ядра - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь удалить все данные в моей основной базе данных, но выдает ошибку и вообще не влияет на базу данных SQLite.

if self.userCredentials.count > 0 {
        for loopIndex in 0 ... self.userCredentials.count - 1 {
                self.context.delete(self.userCredentials[loopIndex])
                self.userCredentials.remove(at: loopIndex)
        }
        self.saveLogin()
}

func saveLogin() {
        do {
            try context.save()
            print ("Context saved successfully")
        }
        catch {
            print ("Error saving items \(error)")
        }
    }

Неустранимая ошибка: индекс выходит за пределы диапазона

1 Ответ

0 голосов
/ 05 июля 2019

Измените свой код на:

for userCredential in userCredentials {
    context.delete(userCredential)
}

saveLogin()

Проблема с вашим кодом заключается в том, что вы зацикливаете количество элементов, которое содержит переменная userCredentials. Это неизменяемое значение, которое не будет изменено и инициализируется до того, как оно зациклится хотя бы один раз.

Вы обращаетесь к индексу массива на основе индекса. Это не так, но не следует делать в тех случаях, когда достаточно простого запрета (см. Код выше).

После этого вы управляете количеством элементов, удаляя элемент. Это не влияет на количество неизменяемых элементов, о котором я говорил выше. Из-за этого рано или поздно вы получите исключение индекса за пределами границ. Вы должны попытаться найти, что это такое, попытаться получить доступ к элементу в списке, который не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...