質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1354閲覧

[Swift]setViewControllersとdataSourceが見つからずエラーが起きる

funya3

総合スコア1

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/12/18 06:06

【Swift】パラパラ漫画風アプリを作ってみた
↑上記のサイトを見ながら作業を進めていましたが、
いくつかエラーが発生したので原因と解決方法を教えていただきたいです。

環境

Xcode:バージョン11.3.1 (11C504)
macOS Catalina:バージョン10.15.5

該当のソースコード

swift

1// PageViewController.swift 2 3import UIKit 4 5class PageViewController: UIViewController { 6 7 //ページ番号 8 var viewControllerIndex : Int = 0 9 10 //画像の名前を格納 11 let imageNames: [String] = ["cat1", "cat2", "cat3", "cat4","cat5","cat6"] 12 13 //viewControllerを格納 14 var targetViewControllers : [UIViewController] = [] 15 16 override func viewDidLoad() { 17 super.viewDidLoad() 18 19 // 表示用ViewControllerを生成(ここで画像分のviewControllerを生成) 20 for i in 0..<imageNames.count { 21 22 let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "vc") as! ViewController 23 // ここで画像を設定 24 viewController.setImageName(imageNames[i]) 25 //viewControllerを追加 26 targetViewControllers.append(viewController) 27 } 28 // Do any additional setup after loading the view. 29 // ↓ エラー① 30 self.setViewControllers([targetViewControllers[0]], direction: .forward, animated: true, completion: nil) 31 32 //自身を格納 33     // ↓ エラー② 34 self.dataSource = self 35 } 36} 37

発生しているエラーメッセージ

エラーメッセージ①↓ Value of type 'PageViewController' has no member 'setViewControllers' エラーメッセージ②↓ Value of type 'PageViewController' has no member 'dataSource'

試したこと

エラーメッセージを検索して調べてみましたが、誤字脱字やカッコ箇所の修正しか見つからず、問題を解決できませんでした。
また、類似するサイトを調べてみましたが、self.dataSource = selfなどは文字が全く同じであり、原因がわかりませんでした。
↓参考サイトは下記になります。
(【Swift】Swift入門 ~ UIPageViewControllerを使ってみる ~)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

記事のソースコードと、自身のコードをよく見比べましょう。

swift

1// 記事のコード 2class PageViewController: UIPageViewController { 3 // 省略 4} 5 6// 質問者さんのコード 7class PageViewController: UIViewController { 8 // 省略 9}

上記の通り、スーパークラスが違います。
(質問のコードはUIViewControllerだが、記事は、UIPageViewControllerとなっている)
スーパークラスが違うと、使えるプロパティもメソッドも変わるので、
同じ実装はできません。

また、記事にも書いている通り、
質問者さんのコードは、途中の段階のもののようなので、
記事のコードを全て書かないと、最終的に正しく動かないものである、とお見受けします。
(つまり現段階では、プロパティが無い、などのエラーは出る可能性があるということ)

投稿2020/12/18 06:51

編集2020/12/18 06:52
miyabi_takatsuk

総合スコア9528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

funya3

2020/12/18 08:22

最後までコードを書き、無事動作を確認することができました。ありがとうございます。 また、他にも自身の見間違えがあることが分かりました。 >パラパラさせるためにstoryboard上にpageViewContorllerを配置します。 と記載されていましたが、ViewContorllerを配置していました。 他には、 // 表示用ViewControllerを生成(ここで画像分のviewControllerを生成) for i in 0..<imageNames.count { let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "vc") as! ViewController ↑ 上記の"Main"と"vc"を理解できていませんでしたが、最終的にViewController自体の名前がMain、Main.ViewControllerのIdentityのStoryboard IDがvcだと理解できました。 今後は、スーパークラスを見間違えていないか気をつけるようにいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問