0
私はまだiOS開発の新人です。私はimages
の値をbanner
(データモデル)に入れたいと考えています。だから、すべての値を取得するにはfunc getAllBanner
と呼ぶ必要があります。その後、func turnToPage
とのみ呼ばれます。私はデバッグする場合Funcが正しく実行されない(Swift 3)
問題はlet controller = controllers[index]
あるが
fatal error: Index out of range
ですが、私はlazy var controllers: [UIViewController]
ことに気づきました。何故ですか ?
本当にありがとうございます。
var images: [UIImage]?
var banner: [Banner]?
// Variable that not create onDidLoad
lazy var controllers: [UIViewController] = {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
var controllers = [UIViewController]()
if let images = self.images {
for image in images {
let sliderImageVC = storyboard.instantiateViewController(withIdentifier: Storyboard.sliderImageViewController)
controllers.append(sliderImageVC)
}
}
self.pageViewControllerDelegate?.setupPageController(numberOfPages: controllers.count)
return controllers
}()
override func viewDidLoad() {
super.viewDidLoad()
automaticallyAdjustsScrollViewInsets = false
dataSource = self
delegate = self
self.getAllBanner(strAppID: "1", locationid: "2")
self.turnToPage(index: 0)
}
// To allow to turn page
func turnToPage(index: Int) {
let controller = controllers[index]
var direction = UIPageViewControllerNavigationDirection.forward
if let currentVC = viewControllers?.first {
let currentIndex = controllers.index(of: currentVC)
if currentIndex! > index {
direction = .reverse
}
}
self.configureViewDisplaying(viewController: controller)
setViewControllers([controller], direction: direction, animated: true, completion: nil)
}
// Get Banner
func getAllBanner(strAppID: String, locationid: String) {
Banner.getBanner(strAppID: strAppID, locationID: locationid) { [weak self] banner in
guard let `self` = self else {
return
}
self.banner = banner
// Update UI here
if let banners = self.banner {
for banner in banners {
let endPoint = URL(string: banner.ImageURL)
do {
let data = try Data(contentsOf: endPoint!)
self.images = [UIImage(data: data)!]
} catch {
print("Error")
}
}
}
}
}
、あなたのself.imagesはあなたのコントローラをループコントローラオーバーÖzgü[email protected] –
ができますないループすることはできませんので、空になっていますか?あなたの提案は何ですか? – Sariyanti
イメージを配列に追加し、forループの外にプロパティを設定し、すべてのイメージをロードした後、つまりforループの外側に 'self.turnToPage(index:0)'を呼び出す必要があります。 – srvv