Ios 无法理解为什么重载数据方法为不同的数据源对象加载相同的数据
在下面的代码中,我创建了数据源对象,并将它们添加到数据源数组中,之后我将这些对象提供给相应的集合,如“即将上映的电影”和“最受欢迎的电影”,它们由核心数据实体的isLatest、isNowPlaying、IsUncoming、IsOperated属性标识。基本上,它是一个集合 我面临的问题是,我无法调试出为什么重载数据方法为集合中的不同数据源对象加载相同的数据(电影) 为了找出问题,我在代码调试中浪费了很多时间。如果您能帮我找出代码中的问题,我们将不胜感激以下是Github项目的公共url。提前感谢。Ios 无法理解为什么重载数据方法为不同的数据源对象加载相同的数据,ios,swift,core-data,uicollectionview,Ios,Swift,Core Data,Uicollectionview,在下面的代码中,我创建了数据源对象,并将它们添加到数据源数组中,之后我将这些对象提供给相应的集合,如“即将上映的电影”和“最受欢迎的电影”,它们由核心数据实体的isLatest、isNowPlaying、IsUncoming、IsOperated属性标识。基本上,它是一个集合 我面临的问题是,我无法调试出为什么重载数据方法为集合中的不同数据源对象加载相同的数据(电影) 为了找出问题,我在代码调试中浪费了很多时间。如果您能帮我找出代码中的问题,我们将不胜感激以下是Github项目的公共url。提前
为什么在所有地方都使用相同的索引,
self.movieDataSources[1]
?还没有看过您的代码,但我猜问题是您的属性名称以“is…”开头。CoreData中似乎存在一个bug,导致它与使用此类属性名称的谓词混淆。请尝试其他名称。@JoakimDanielson我已更新了代码。在这段代码中,我没有使用相同的索引。我建议您转到Github链接,下载项目并运行它。我问了一个问题,但您没有回答,也没有解释您现在更改代码的原因。更改有什么改进吗?为什么您在所有地方都使用相同的索引,self.movieDataSources[1]
?还没有看过您的代码,但我猜问题在于您的属性名称以“is…”开头。CoreData中似乎存在一个bug,导致它与使用此类属性名称的谓词混淆。请尝试其他名称。@JoakimDanielson我已更新了代码。在这段代码中,我没有使用相同的索引。我建议您转到Github链接,下载项目并运行它。我问了一个问题,但您没有回答,也没有解释您现在更改代码的原因。改变有什么改善吗?
func loadUpcomingMovies(page: Int, handler: @escaping FetchMoviesFromSourceCompletionHandler) {
modelLayer.loadUpcomingMovies(from: .local, page: page) { (movies, source, error) -> (Void) in
if (error == nil) {
if movies.count != 0 {
self.movieDataSources[0] = MovieCollectionDataSource(movies: movies)
}
handler(.local)
}
}
modelLayer.loadUpcomingMovies(from: .network, page: page) { (movies, source, error) -> (Void) in
if (error == nil) {
if movies.count != 0 {
self.movieDataSources[0] = MovieCollectionDataSource(movies: movies)
}
handler(.network)
}
}
}
func loadTopRatedMovies(page: Int, handler: @escaping FetchMoviesFromSourceCompletionHandler) {
modelLayer.loadTopRatedMovies(from: .local, page: page) { (movies, source, error) -> (Void) in
if (error == nil) {
if movies.count != 0 {
self.movieDataSources[1] = MovieCollectionDataSource(movies: movies)
}
handler(.local)
}
}
modelLayer.loadTopRatedMovies(from: .network, page: page) { (movies, source, error) -> (Void) in
if (error == nil) {
if movies.count != 0 {
self.movieDataSources[1] = MovieCollectionDataSource(movies: movies)
}
handler(.network)
}
}
}