Xcode 7.3 でRSSフィードアプリを作ろうと思っているのですが、
RSSをGoogleが提供するJson形式に変換するAPIを通して、組み込んでみたのですが、
Xcodeコンソール上に何も反応がありません。ウェブデータが取得しているのかもDebug Areaに表示されないためうまくいっているのかわかりません。そもそもxcodeの設定の問題なのでしょうか?
こちらの記事を参考に進めています。
http://webfood.info/swift-rss-reader/
TableViewにURLから取得するデータが反映されません。
Podfile内に、ライブラリを作成しました。ウェブページ情報を取得したいです。
source 'https://github.com/CocoaPods/Specs.git' use_frameworks! platform :ios, '8.0' target 'RssReaderApp' do pod 'PageMenu' pod 'Alamofire' pod 'SwiftyJSON' end
TableViewController.swiftは
import UIKit import Alamofire import SwiftyJSON class TableViewController: UITableViewController { var fetchFrom: String? var parent: UIViewController? var entries: [Entry] = [] override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self self.tableView.registerNib(UINib(nibName: "FeedTableViewCell", bundle: nil), forCellReuseIdentifier: "FeedTableViewCell") Alamofire.request(.GET, fetchFrom!).responseJSON { response in if let values = response.result.value { JSON(values)["responseData"]["feed"]["entries"].forEach {i,value in self.entries.append(Entry( title: value["title"].string!, desc: value["content"].string!, link: value["link"].string! )) } self.tableView.reloadData() } } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.entries.count } override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return 90 } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("FeedTableViewCell", forIndexPath: indexPath) as! FeedTableViewCell let entry = self.entries[indexPath.row] cell.title.text = entry.title cell.desc.text = entry.desc return cell } }
FeedTableViewCell.swift
import UIKit class FeedTableViewCell: UITableViewCell { @IBOutlet weak var title: UILabel! @IBOutlet weak var desc: UILabel! override func awakeFromNib() { super.awakeFromNib() // Initialization code } override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state }
とEntrySwiftではtitle, desc, linkを String と定義しております。
これらによってセルに情報を提示したいのですが、やはり、APIデータに問題があるようです。
こちらが、ViewController.swiftのコードです。
ビルドは問題なくできます、エラーも出ずに、しかしAPI取得じのコンソールには何も表示されないので、無事に取得できていない模様です。
import UIKit import PageMenu class ViewController: UIViewController { var pageMenu : CAPSPageMenu? override func viewDidLoad() { super.viewDidLoad() var controllers : [UIViewController] = [] let feeds: [Dictionary<String, String>] = [ [ "link": "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://menthas.com/top/rss", "title": "top" ], [ "link": "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://menthas.com/ruby/rss", "title": "ruby" ], [ "link": "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://menthas.com/ios/rss", "title": "ios" ], [ "link": "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=http://menthas.com/infrastructure/rss", "title": "infrastructure" ], ] for feed in feeds { let feedController = TableViewController(nibName: "TableViewController", bundle: nil) feedController.parent = self feedController.fetchFrom = feed["link"]! feedController.title = feed["title"] controllers.append(feedController) } let params: [CAPSPageMenuOption] = [ .ScrollMenuBackgroundColor(UIColor.blackColor()), .ViewBackgroundColor(UIColor.whiteColor()), .SelectionIndicatorColor(UIColor.orangeColor()), .MenuItemFont(UIFont(name: "HelveticaNeue", size: 15.0)!), .MenuHeight(80.0), .MenuItemWidth(90.0), .CenterMenuItems(true) ] pageMenu = CAPSPageMenu( viewControllers: controllers, frame: CGRectMake( 0.0, 0.0, self.view.frame.width, self.view.frame.height ), pageMenuOptions: params ) self.addChildViewController(pageMenu!) self.view.addSubview(pageMenu!.view) pageMenu!.didMoveToParentViewController(self) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
何かXcode上で設定が間違っているのでしょうか?
APIを通したURL を変えてみると、
”App Transport Security has blocked a cleartext HTTP”とエラーメッセージがコンソールに表示されたので、 info.plistより、 App Transport Security Settingを追加して、
Allow Arbitrary Loads を作成し、"YES" を選択しました。
しかし、ビルドをしてもデータが取得しいる画面が上がってきません。
宜しくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。