2017-01-27 10 views
2

私はiOSを初めて使っています。私はMWFeedParserを使用して簡単なRSSリーダーを構築しようとしていました。私はビルドエラーがなくなり、シミュレータが正常にポップアップしますが、シミュレータはRSSフィードを表示しませんが、tableViewだけを空白にします。 私は何が間違っていると考えることができません。どんな助力も非常に高く評価されます。ありがとう。私のコードに何が問題なのか分かりません(MWFeedParserのRSSリーダー)

// FeedTableViewController.swift 
// RssReader 

import UIKit 
import MWFeedParser 

class FeedTableViewController: UITableViewController, MWFeedParserDelegate { 

    var feedItems = [MWFeedItem]() 

    func request() { 

     let url = NSURL(string: "http://feeds.nytimes.com/nyt/rss/Technology") 
     //creating a feedparser object 
     let feedParser = MWFeedParser(feedURL: url as URL!) 
     feedParser?.delegate = self 
     feedParser?.parse() 

    } 


    // MARK: - FEED PARSER DELEGATE 

    func feedParserDidStart(_ parser: MWFeedParser!) { 
     feedItems = [MWFeedItem]() 
    } 


    func feedParserDidFinish(_ parser: MWFeedParser!) { 
     self.tableView.reloadData() 
    } 

    func feedParser(_ parser: MWFeedParser!, didParseFeedInfo info: MWFeedInfo!) { 
     print(info) 
     self.title = info.title 
    } 

    func feedParser(_ parser: MWFeedParser!, didParseFeedItem item: MWFeedItem!) { 
     feedItems.append(item) 
    } 



    override func viewDidLoad() { 
     super.viewDidLoad() 
      } 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 

     request() 

    } 


    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    // MARK: - Table view data source 


    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
     //height for rows 
     return 100 
    } 

    override func numberOfSections(in tableView: UITableView) -> Int { 
     // return the number of sections 
     return 1 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     // return the number of rows 
     return feedItems.count 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) 

     // Configure the cell... 
     let item = feedItems[indexPath.row] as MWFeedItem 
     cell.textLabel?.text = item.title 

     return cell 
    } 

} 
+0

このライブラリの動作についてはわかりませんが、おそらくフィードパースを保持するものは何もなく、要求の開始直後に割り当てが解除されます。パーサーを強く参照するためにプロパティを使用してみてください。 – Moxy

+0

@Moxyご返信いただきありがとうございます。私はチュートリアル[https://www.youtube.com/watch?v=jootsUaCvAU]に完全に基づいていますが、私の方法でそれを実行しました。あなたは強い参照を保持しているプロパティの使用を手助けしてください。再度、感謝します。 –

答えて

0

実際には、ATSを尊重していないため、コードは機能していません。言い換えれば、あなたのフィードはHTTPSではなくHTTPSにあります。それは安全ではないので、リソース負荷:あなたがコンソールを開く場合は、次のようなメッセージが表示されるはずです

のApp交通セキュリティは、平文HTTP(// HTTP)をブロックしています。一時的な例外は、アプリのInfo.plistファイルで設定できます。

あなたのinfo.plist

info.plist screenshot

に例外を設定することにより、この問題を解決しかし、Appleが近い将来にATSの例外を受け付けないことを考えてみましょうことができます。

+0

ありがとうございました。あなたはATSのエラーについて絶対に正しいと思っていました。私はあなたが示唆したようにすべての変更を加えたが、それはそれを修正しなかった。私はまだ同じATSエラーを取得しています。私はこのプロジェクトをきれいにして、それをやり直した。私はATSSで「AllowsArbitraryLoads」を試して「YES」に設定しましたが、それでも助けにはなりませんでした。私は何が間違っているのか分かりません。私はあなたが再び見せているように書いてみましたが、うまくいかないことはわかりません。関係がある場合は、Xcode 8とswift 3を使用しています。他の方法でこの問題を解決できますか? –

+0

さて、私はついにそれを稼働させました!修正は、「任意の負荷を許可する」を追加してその値をYESに設定して、App Transport and Security Settingsの下にあります。また、ATS設定の下にException Domainsを追加し、その下にウェブサイトを追加します。たとえば、ここではnytimes.comです。辞書の代わりにTypeをStringとして設定します。私の場合、NSExceptionAllowsinsecureHTTPLoadsとNSIncludesSubdomainsは必要ありませんでした。この問題に遭遇する人に役立つことを願っています。私はスクリーンショットを投稿するのが大好きでしたが、私はそれをすることができないようです。そして、@Moxyは大変ありがとうございました。あなたの答えはとても助けになりました。 –

+0

@JohnNapes私はあなたが投稿し、代わりに答えることをお勧めします、コメントは一時的です。もしSOのユーザーMoxyが提供する答えがあなたを助けたら、私はあなたが彼の答えを受け入れ、彼にアップヴォートを与えることを勧めます。 –

関連する問題