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

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

新規登録して質問してみよう
ただいま回答率
85.50%
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回答

2357閲覧

xcode7beta5かswift2でのエラーです。xcode6ではエラーが出ません。こういう場合どのように解決すればいいでしょうか?

Aru.

総合スコア61

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クリップ

投稿2015/08/29 08:12

編集2015/08/29 20:08

NSXMLParserを使用しパースしようとすると下記のエラーがでます。
どういう意味ですか。
同じようなエラーがでているようでいろいろ試したのですが治りません。
appleのDocumentをみても出来ませんでした。
どのようにすればいいでしょうか?
xcode7beta5でswift2を使用していますです。

エラー

Objective-C method 'parser:didStartElement:namespaceURI:qualifiedName:attributes:' provided by method 'parser(_:didStartElement:namespaceURI:qualifiedName:attributes:)' conflicts with optional requirement method 'parser(_:didStartElement:namespaceURI:qualifiedName:attributes:)' in protocol 'NSXMLParserDelegate'

コード

import UIKit class ViewController: UIViewController,NSXMLParserDelegate { var isTitle:Bool=false var isLink:Bool=false var parser = NSXMLParser() override func viewDidLoad() { super.viewDidLoad() var url:String="http://rss.dailynews.yahoo.co.jp/fc/rss.xml" var urlToSend: NSURL = NSURL(string: url)! parser = NSXMLParser(contentsOfURL: urlToSend)! parser.delegate = self //以下の1行の処理でparse関連の処理が行われる。 var success:Bool = parser.parse() if success { print("パース成功") } else { print("パース失敗") } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } // ここから下はParse関連処理 //開始タグを読み込んだ時よばれる - Start func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) { if (elementName == "title"){ isTitle = true; }else if(elementName == "link"){ isLink = true; } } //閉じタグを読み込んだ時よばれる - End func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { if (elementName == "title"){ isTitle = false; }else if(elementName == "link"){ isLink = false; } } //タグ以外のテキストを読み込んだ時(タグとタグ間の文字列) func parser(parser: NSXMLParser, foundCharacters string: String?) { if(isTitle) { print("タイトル=\(string)") }else if (isLink){ print("リンク=\(string)") } } //エラー発生時 func parser(parser: NSXMLParser, parseErrorOccurred parseError: NSError) { NSLog("failure error: %@", parseError) } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

当方Xcode7.0-beta6で試してみました。
didStartElementの最後の引数の型が変わって
attributeDict: [NSObject : AnyObject]からattributeDict: [String : String]になったみたいですね。

下記のようにすればOKだと思います。

Swift

1 func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 2 if (elementName == "title"){ 3 isTitle = true; 4 }else if(elementName == "link"){ 5 isLink = true; 6 } 7 }

どうやって探したかということですが、protocolの宣言の中身を確認してエラーになっている部分の定義を確認しました。

具体的には

  1. class ViewController: UIViewController, NSXMLParserDelegate {NSXMLParserDelegateの部分にカーソルをあててControlボタンを押しながらクリックを押す
  2. エラーになっているメソッドと同じ名前のメソッドが定義されている部分を検索(今回はdidStartElementで検索)
  3. 見てみたら型が異なっていたので使っている部分の型を定義通りに修正

-> エラーなくなった!
という流れです。

Xcode7からはSwiftのバージョンが2になりますので他にもいろいろ変更が出てくると思います。
今回のように定義を確認する、Swift2+該当のメソッド名でググる、Appleのドキュメントを読むなどでいつも対応しています:-)

投稿2015/09/02 06:08

編集2015/09/02 06:13
jollyjoester

総合スコア1585

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

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

Aru.

2015/09/04 05:40

エラー対処の探し方まで教えて下さり有り難うございます。今後そのやり方を実践してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問