当前,我正在基于id检查对象是否已存在于核心数据中,然后进行更新和插入。有什么更好的方法吗?添加了“ id”作为唯一约束,从而防止插入具有相同“ id”的对象。插入是否仅更新具有相同ID的现有对象?
@nonobjc public class func saveUserMovies(movieJSON: [[String: Any]],user: UserProfile,isFavorites: Bool = false,isWatchlisted: Bool = false) {
let context = MMPersistentStore.sharedInstance.privatemanagedobjectcontext
for movie in movieJSON {
let movieID = movie["id"] as! Int
let fetchMovieWithIDRequest = fetchMovieRequest()
let moviePredicate = NSPredicate(format: "id == %d",movieID)
let sortDiscriptor = NSSortDescriptor(key: "id",ascending: false)
fetchMovieWithIDRequest.sortDescriptors = [sortDiscriptor]
fetchMovieWithIDRequest.predicate = moviePredicate
var userMovie: UserMovie?
context.performAndWait {
do {
userMovie = try fetchMovieWithIDRequest.execute().first
} catch {
print(MMErrorStrings.coreDataFetchError)
}
}
if let fetchedmovie = userMovie {
fetchedmovie.genreIds = movie["genre_ids"] as? [Int64]
fetchedmovie.adult = movie["adult"] as? Bool ?? false
if isFavorites {
fetchedmovie.isFavorite = isFavorites
} else {
fetchedmovie.isWatchlisted = isWatchlisted
}
fetchedmovie.video = movie["video"] as? Bool ?? false
fetchedmovie.backdropPath = movie["backdrop_path"] as? String
fetchedmovie.originalLanguage = movie["original_language"] as? String
fetchedmovie.originalTitle = movie["original_title"] as? String
fetchedmovie.overview = movie["overview"] as? String
fetchedmovie.posterPath = movie["poster_path"] as? String
fetchedmovie.releaseDate = movie["release_date"] as? String
fetchedmovie.releaseYear = String(fetchedmovie.releaseDate?.prefix(4) ?? "")
fetchedmovie.title = movie["title"] as? String
fetchedmovie.popularity = movie["popularity"] as? Double ?? 0.0
fetchedmovie.voteCount = movie["voteCount"] as? Int64 ?? 0
fetchedmovie.voteAverage = movie["voteAverage"] as? Double ?? 0.0
MMPersistentStore.sharedInstance.save(context: context)
} else {
let fetchedmovie = UserMovie(context: context)
fetchedmovie.id = movie["id"] as? Int64 ?? 0
fetchedmovie.user = user
fetchedmovie.genreIds = movie["genre_ids"] as? [Int64]
fetchedmovie.adult = movie["adult"] as? Bool ?? false
if isFavorites {
fetchedmovie.isFavorite = isFavorites
} else {
fetchedmovie.isWatchlisted = isWatchlisted
}
fetchedmovie.video = movie["video"] as? Bool ?? false
fetchedmovie.backdropPath = movie["backdrop_path"] as? String
fetchedmovie.originalLanguage = movie["original_language"] as? String
fetchedmovie.originalTitle = movie["original_title"] as? String
fetchedmovie.overview = movie["overview"] as? String
fetchedmovie.posterPath = movie["poster_path"] as? String
fetchedmovie.releaseDate = movie["release_date"] as? String
fetchedmovie.releaseYear = String(fetchedmovie.releaseDate?.prefix(4) ?? "")
fetchedmovie.title = movie["title"] as? String
fetchedmovie.popularity = movie["popularity"] as? Double ?? 0.0
fetchedmovie.voteCount = movie["voteCount"] as? Int64 ?? 0
fetchedmovie.voteAverage = movie["voteAverage"] as? Double ?? 0.0
MMPersistentStore.sharedInstance.save(context: context)
}
}
}
}