WWDC20 セッション「合併症を最新に保つ」、WWDC20-10049 をフォローしようとしています。コードをたどろうとすると、スケジュール機能に行き詰まりました。
func schedule(_ first: Bool) {
if backgroundTask == nil { //Issue is here
if let url = self.currentWeatherURLForLocation(delegate.currentLocationCoordinate)
{
let bgTask = backgroundURLSession.downloadTask(with: url)
bgTask.earliestBeginDate = Date().addingTimeInterval(first ? 60 : 15*60)
bgTask.countOfBytesClientExpectsToSend = 200
bgTask.countOfBytesClientExpectsToReceive = 1024
bgTask.resume()
backgroundTask = bgTask //Issue is here
}
}
}
}
セッションはスニペットのみを提供したため、私が抱えている問題は、var backgroundTask が定義されている場所です。この関数は、データ モデル (この場合は ) で宣言されていますWeatherDataProvider
。明らかに ですがbackgroundURLSession.downloadTask
、識別されていないself
ため、関数に対してローカルである必要がありますが、スニペットには示されていません。関数へのパラメーターとして送信されるか、データモデル自体で宣言されると思います。そこで宣言されている場合、トークによると、スニペットがチェックインされてキューにバックグラウンドリクエストがあるかどうかを確認し、関数が別のリクエストをスケジュールしないように、以前のバックグラウンドリクエストにアクセスできるようにどのように宣言されますか。過去数日間検索しましたが、このセッションで Apple がどこから来たのかを理解するために使用できる、これを実装するものは何も見つかりませんでした。
この回答とセッションの概要を確認しましたが、これはわかりませんでした。
ありがとう。