30419


現在Swift
3でRSSリーダーを開発をしているのですが、一つのURLからの表示ができたのですが複数のURLで表示させようとするとその配列の中の一つしか表示されません。  
JSON変換はGoogleのAPIを使っています。  
コードはこちらです。

[code]

    class MatomeVieController: UIViewController , UITableViewDelegate, UITableViewDataSource {
        var NewDataArray = NSArray()
    
        var myTableView : UITableView!
    
        var matomeURL = "http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=表示させたいURL&num=100"
    
        var URLstring : [String] = [
            "http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=表示させたいUR&num=100",
            "http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=表示させたいUR&num=100",
            "http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=表示させたいUR&num=100"
        ]
        var isLoading : Bool = false
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            ...
            GetURLSRSS()
            ...
        }
    
        func GetURLSRSS() {
            for URLstrings in URLstring {
                if let requestURL2 = Foundation.URL(string: URLstrings) {
                    Alamofire.request(requestURL2, method: .get ,parameters: nil).responseJSON {
                        response in
                        if let json = response.result.value {
                            let jsonDic = json as! NSDictionary
                            let responseData = jsonDic["responseData"] as! NSDictionary
                            let feed = responseData["feed"] as! NSDictionary
                            self.NewDataArray = feed["entries"] as! NSArray
                        }
                        self.myTableView.reloadData()
                    }
                }
            }
        }
    
        func numberOfSections(in tableView: UITableView) -> Int {
            return 1
        }
    
        func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            return 80
        }
    
        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    
            let NewDic = NewDataArray[indexPath.row] as! NSDictionary
            let NewURL = NewDic["link"] as! String
            url = Foundation.URL(string: NewURL)
            let Deteilwebview = UINavigationController(rootViewController: WebViewController())
        }
    
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return NewDataArray.count
        }
    
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
            // 再利用するCellを取得する.
            let cell = tableView.dequeueReusableCell(withIdentifier: "ItemCell", for: indexPath) as! ItemCell
    
            let Newdic = NewDataArray[indexPath.row] as! NSDictionary
            let title = Newdic["title"] as? String
            let publishedDate = Newdic["publishedDate"] as? String
            let links = Newdic["link"] as! String
            let timedate = self.convertDateFormat(publishedDate!)
    
    
            cell.title.text = title
            cell.author.text = "サイト名"
            cell.time.text = timedate
            cell.link = links
    
            return cell
        }
    }
    
[/code]

複数のサイトを一つのViewで表示するにはどのように表現したら良いでしょうか？


CC BY-SA 3.0
2016-11-14T16:48:39.403
30402
2016-11-15T08:24:41.540
2016-11-15T08:15:11.673
5519
19562
question
swift ios xcode swift3 alamofire
複数のエンドポイントから取得したJSONの配列を１つのテーブルビューに表示したい


下記のところで、`NewDataArray`に代入してしまっているので、後から受信したデータで先に受信したデータが上書きされてしまっています。

[code]

    self.NewDataArray = feed["entries"] as! NSArray
    
[/code]

受信したデータをそれぞれ１つにまとめて表示するには、上書きするのではなくて、それぞれを１つにまとめる必要があります。

[code]

    let entries = feed["entries"] as! NSArray
    self.NewDataArray.addObjects(from: entries)
    
[/code]

たとえば上記のようにします。  
このとき、`NewDataArray`が`var NewDataArray =
NSArray()`のように`NSArray`のインスタンスなので、そのままではデータを追加することができません。上記のようにするには`var
NewDataArray = NSMutableArray()`のように変更可能な`NSMutableArray`を使う必要があります。

余談ですが、もともと`NSArray`を使われていたのと`feed["entries"]`の型が不明なので、そのまま`NSMutableArray`とだけ変更しましたが、Swiftでは`NSArray`や`NSMutableArray`を使用するメリットはないので、Swift標準ライブラリに用意されている`Array`を使う方が（型安全だったりするので）良いです。`NSDictionary`も同様で`Dictionary`を使いましょう。


CC BY-SA 3.0
2016-11-15T08:24:41.540
30419
2016-11-15T08:24:41.540
5519
30402
answer