человек. Я учусь работать с CoreData и у меня есть вопрос. У меня есть «WordArrayEntity», которые имеют отношение oneToMany с «WordEntity» и правило удаления Nulify. Поэтому сначала, когда мое приложение начинает получать информацию из моего CoreData в специальный массив
var wordEntities:[[WordEntity]] = []
После этого мой tableView получает атрибут, который ему нужен. Как я понимаю, я могу удалить объекты этим методом
context.delete(wordEntity)
все работает нормально, когда я делаю это на моем tableView. Но когда я перехожу в редактор ViewController и пытаюсь добавить новую сущность или удалить предыдущую, ничего не происходит. Это мой код для перехода к следующему контроллеру представления
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
if let controller = self.storyboard?.instantiateViewController(withIdentifier: "ShowWordVC") as? ShowWordVC {
controller.word = SingleTonForEntities.shared.wordEntities[indexPath.section][indexPath.row]
controller.wordIndex = indexPath.row
self.present(controller, animated: true)
}
}
Это мой метод удаления слова, который отлично работает в tableView
func deleteWordFromVocabulary(word: WordEntity,indexPath: Int) {
var wordStartsFromLetter = false
if let firstCharacter:Character = word.englishWord?.first {
var index = 0
for array in wordEntities {
if SingleTon.shared.sectionName[index].lowercased() == firstCharacter.lowercased() {
var newArray = array
context.delete(word)
newArray.remove(at: indexPath)
wordEntities[index] = newArray
wordStartsFromLetter = true
}
index += 1
}
}
if wordStartsFromLetter == false {
var newArray = wordEntities[26]
context.delete(word)
newArray.remove(at: indexPath)
wordEntities[26] = newArray
}
saveContext()
}
Когда я пытаюсь сохранить слово после редактирования или новый у меня следующий код
@IBAction func saveButtonIsPressed(_ sender: UIButton) {
keyboardDissapears()
guard let englishWord = self.englishWordTextField.text,
!englishWord.isEmpty,
let wordImage = addedImageView.image,
let belarusianWord = self.belarusianWordTextField.text,
!belarusianWord.isEmpty,
let englishDefinition = self.englishDefinitionTextView.text,
!englishDefinition.isEmpty,
let belarusianDefinition = self.belarusianDefinitionTextView.text,
!belarusianDefinition.isEmpty else {
createAndShowAlert()
return
}
if editModeIsActivated == true {
if let wordToDelete = word, let wordIndex = wordIndex {
SingleTonForEntities.shared.deleteWordFromVocabulary(word: wordToDelete, indexPath: wordIndex)
}
}
word!.englishDefinition = englishDefinition
word!.belarusianDefinition = belarusianDefinition
word!.englishWord = englishWord
word!.belarusianWord = belarusianWord
let data = wordImage.pngData()
word!.wordImage = data
SingleTonForEntities.shared.addNewWordToVocabulary(word: self.word)
self.createAndShowDoneProgressAlert()
}
сначала я проверяю, не заполнены ли мои поля. Если они не пусты, и мы находимся в режиме редактирования, я удаляю «WordEntity» из нашего контекста, а затем из нашего массива. А потом я пытаюсь сохранить новое слово и добавить его в контекст с помощью этого метода
func addNewWordToVocabulary(word: WordEntity!) {
var wordStartsFromLetter = false
word.englishWord = word.englishWord!.trimmingCharacters(in: .whitespacesAndNewlines)
if let firstCharacter:Character = word.englishWord?.first {
var index = 0
for array in wordEntities {
if SingleTon.shared.sectionName[index].lowercased() == firstCharacter.lowercased() {
var newArray = array
newArray.append(word)
for element in wordEntitesArray {
if element.arrayName == SingleTon.shared.sectionName[index].lowercased() {
element.addToWordEntities(word)
}
}
wordEntities[index] = newArray
wordStartsFromLetter = true
}
index += 1
}
}
if wordStartsFromLetter == false {
var newArray = wordEntities[26]
newArray.append(word)
wordEntities[26] = newArray
}
saveContext()
}
И возникает вопрос. Что я делаю неправильно? Когда я пытаюсь добавить новое слово в словарь - мое приложение вылетает. Но когда я в режиме редактирования и после него добавляю новое слово в словарь - он просто возвращает пустой tableViewCell. Я новичок в CoreData и работаю с ним около недели, но я был бы рад узнать, что я делаю неправильно и что мне следует делать в таких ситуациях.
PS С UserDefaults все работало хорошо