В настоящее время я работаю над небольшим проектом, в котором я изучаю разработку для IOS. Но я наткнулся на проблему, которая не может показаться мне безразличной. Я занимаюсь разработкой приложения в Swift, которое может хранить фильмы и списки просмотра. Используя базовые данные, я установил связь между многими из них, чтобы иметь возможность добавлять фильмы в один или несколько списков наблюдения и наоборот.
У меня проблема с удалением этих ссылок. Если отношения установлены, я не могу найти способ «отключить» определенный mov ie и список наблюдения. Сценарий:
При создании экземпляра моей модели просмотра я выбираю mov ie, который в данный момент выбран следующим образом:
func getMovie(with title: String) {
guard let context = self.managedContext else {
assertionFailure("Context not available")
return
}
let predicate = NSPredicate(format: "title == %@", title)
let fetchRequest = NSFetchRequest<NSFetchRequestResult>.init(entityName: "WLMovie")
fetchRequest.fetchLimit = 1
fetchRequest.predicate = predicate
do {
let result = try context.fetch(fetchRequest)
for movie in result {
self.wlMovie = movie as? WLMovie
}
} catch let error as NSError {
print("Could not retreive movie. \(error)")
}
}
После этого, если есть связь, я хочу удалить ее и делаю это так (! Мне нужны защитные операторы, потому что я сохраняю переменные как необязательные):
func removeFromWatchList(at index: Int) {
guard let context = self.managedContext else {
assertionFailure()
return
}
guard let movieToRemove = self.wlMovie,
let watchListToRemoveFrom = self.watchLists?[index] else { return }
do {
self.watchLists?[index].removeFromMovies(movieToRemove)
self.wlMovie?.removeFromWatchlists(watchListToRemoveFrom)
try context.save()
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
}
Переменные класса:
private(set) var watchLists: [Watchlist]?
private var wlMovie: WLMovie?
После удаления ссылки она все еще будет существовать, но не выдаст ошибку. Документация по отношениям «многие ко многим» в Core Data очень скудна, поэтому я надеюсь, что кто-то скажет мне, что я делаю здесь неправильно. Спасибо!