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

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

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

RSS(Really Simple Syndication)はブログのエントリやニュースの見出し、標準のフォーマットの音声やビデオなどを発行するために使われるウェブフィードのフォーマットの集合体です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

Q&A

解決済

1回答

1191閲覧

RSS形式のニュースアプリが真っ白を解決したい。

Aya.0307.m

総合スコア2

RSS

RSS(Really Simple Syndication)はブログのエントリやニュースの見出し、標準のフォーマットの音声やビデオなどを発行するために使われるウェブフィードのフォーマットの集合体です。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/07/02 03:15

編集2020/07/02 06:09

前提・実現したいこと

rss形式のニュースアプリを作りたいです。

初めまして。
最近swiftを始めたばかりの初心者です。
現在参考書を見ながら勉強しているのですが、うまくいきません。
私なりに調べたのですが、解決できないです。

以下のコードを書いてエラーは特に出てないのですが、シュミレーターを起動すると、
セルが真っ白になってしまいます。
優しい方教えてください。どうぞ、よろしくお願いします。

該当のソースコード

swift

1import UIKit 2 3class ListViewController: UITableViewController, XMLParserDelegate { 4 5 var parser:XMLParser! 6 var items = [Item]() 7 var item:Item? 8 var currentString = "" 9 10 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 11 return items.count 12 } 13 14 override func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell { 15 let cell = tableView.dequeueReusableCell(withIdentifier: "cell",for: indexPath) 16 cell.textLabel?.text = items[indexPath.row].titile 17 return cell 18 } 19 20 override func viewDidDisappear(_ animated: Bool) { 21 super.viewDidAppear(animated) 22 startDownLoad() 23 } 24 25 func startDownLoad() { 26 self.items = [] 27 if let url = URL(string: "hhttps://www.news24.jp/rss/index.rdf"){ 28 if let parser = XMLParser(contentsOf: url) { 29 self.parser = parser 30 self.parser.delegate = self 31 self.parser.parse() 32 } 33 } 34 35 } 36 37 func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String?,qualifiedName qName: String?, attributes attributeDict: [String : String]){ 38 self.currentString = "" 39 if elementName == "item" { 40 self.item = Item() 41 } 42 } 43 44 func parser(_ parser: XMLParser, foundCharacters string: String) { 45 self.currentString += string 46 } 47 48 func parser(_ parser: XMLParser, didEndElement elementName: String,namespaceURI: String?,qualifiedName qname: String?) { 49 switch elementName { 50 case "title": self.item?.titile = currentString 51 case "link": self.item?.link = currentString 52 case "item": self.items.append(self.item!) 53 default : break 54 } 55 } 56 57 func parserDidEndDocument(_ parser: XMLParser) { 58 self.tableView.reloadData() 59 } 60}

URLを違うサイトにしたりと試したのですが、上手くいきません。

補足情報(FW/ツールのバージョンなど)

mac book pro 13inch 2010 Mid
OS Elcaption 違うソフトとの兼ね合いでこのバーションで止めてます。
Xcode バージョン8.2.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

2箇所 Typo がありますから、そこを修正すると表示されるようになるかと思います。

Swift

1 //override func viewDidDisappear(_ animated: Bool) { 2 override func viewDidAppear(_ animated: Bool) {

viewDidDisappearは、画面が消えた後に呼び出されるメソッドです。
たぶん Xcode を使った自動補完で入力されたのだと思いますが、似たようなメソッド名が多いので、間違って入力されたのかと思います。

Swift

1 //if let url = URL(string: "hhttps://www.news24.jp/rss/index.rdf"){ 2 if let url = URL(string: "https://www.news24.jp/rss/index.rdf"){

https とすべきところを hhttps と hを二つ重ねてしまっているため、正しい URL にアクセスできていませんでした。

原始的ですが、ごく簡単なデバッグ方法としては、各メソッドの先頭などにprint("表示したいメッセージ")とか、print(#function)などを入れることによって、逐一メッセージを出す方法だと思います。

この方法を使えば、どこまでどのメソッド(関数)が呼び出されているのか動的に、かつ視覚的に追えるのでそこそこ便利です。


あくまでもメッセージの例ですが

Swift

1 func startDownLoad() { 2 // 呼び出されたメソッド名が表示される 3 print(#function) 4 self.items = [] 5 if let url = URL(string: "https://www.news24.jp/rss/index.rdf"){ 6 // 自分が進捗を確認できればメッセージは何でも良いし、変数の中身を出しても良い 7 print("URLは読み込めた") 8 if let parser = XMLParser(contentsOf: url) { 9 print("XMLの設定は行えた") 10 11 self.parser = parser 12 self.parser.delegate = self 13 self.parser.parse() 14 } 15 } 16 }

あと、次ご質問される機会があれば、コード部分を ```(実際は小文字のバッククオート3つ)とかエディタの <CODE> 機能で囲ってもらえると、ソースが綺麗に整形されて表示されますから大変助かります。

投稿2020/07/02 03:54

編集2020/07/02 05:41
TsukubaDepot

総合スコア5086

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

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

Aya.0307.m

2020/07/02 05:35

無事に上手く起動しました!ありがとうございます!助かりました。 2点次回のために質問させて下さい。 ・具体的に今回なら、print("表示したいメッセージ")や、print(#function)はどのように書いたらいいのでしょうか? ・コード部分を ```で囲うのは、 今回ならimportの前と一番最後の"}"の後ろに```を入力すればいいのでしょうか? 初歩的な質問ですみません。。
TsukubaDepot

2020/07/02 05:43

print()の例については回答本文に追記しました。 要は、処理がどこまで進んでいるのかわかれば良いので、そのときに表示したい内容で良いかと思います(もちろん、変数の中身はデバッガでも把握できますが、実行時、つまり動的に把握するのに都合いいのはprint()による表示かと思います。 コードの囲いかたはコメントのとおりで大丈夫です。 ``` import UIKit .... ... ``` のような感じで囲っていただければ、私の回答や他の方のご質問とおなじく、整形されて(場合によってはハイライトされて)表示されるのでさらに見やすくなります。
Aya.0307.m

2020/07/02 05:53

ありがとうございます。わかりました! 優しく教えて下さり、感謝致します。 TsukubaDepotさんの今日1日が素敵な1日になりますように☆*.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問