2017-01-17 4 views
0

私はプロジェクトに取り組んでユーザーにニュースフィードを表示しています。テーブルビューUserDefaultsを使用して値を入力するときにreloadData()が機能しない

私はgetNewsFeeds()関数を呼び出してニュースフィードを取得しています。

私は1時間ごとに新しいニュースフィードを生成します

ViewDidLoad(){ 

    get current time in "HH" format and store it in currentTime 

    Store this currentTime in to a HoursVar variable using UserDefaults 

    } 

    ViewDidAppear(){ 

    if(currentTime - HoursVar >= 1){ 
    getNewsFeeds 
    }else{ 

    } 
    retreiveStoredValuesFromUserDeafults() 
    } 

私は

)保存Userdefaults retreiveStoredValuesFromUserDeafults(からデータを取得するときにtableViewを移入する場所を正確にセットアップする私のtableViewDataSOurceの委任方法とreloadData知りませんあなたは&をvを取得するSetValueとき
override func viewDidLoad() { 
    super.viewDidLoad() 



    hoursFormatter.dateFormat = "HH" 
    hoursVar = Int(hoursFormatter.string(from: hours))! 

    if hoursVar > 12 { 
     hoursVar = hoursVar - 12 
    } 

    self.defaults.set(self.hoursVar, forKey: "hoursVar") 

    customNavBar() 
    self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) 
    feedsArray = ["Reliance","Economy"] 

} 

override func viewDidAppear(_ animated: Bool) { 

    //getRssFeeds() 

    if((hoursVar - myHoursVar) == 1 && (hoursVar - myHoursVar) > 1){ 

     getRssFeeds() 

    }else{ 



     feedsTable.register(UITableViewCell.self, forCellReuseIdentifier: "newsFeeds") 

      self.feedsTable.delegate = self 
      self.feedsTable.dataSource = self 

     retreiveMyArrayData() 

     feedsTableView.reloadData() 
    } 

} 

func getRssFeeds(){ 

    for i in 0..<feedsArray.count{ 

     let url = URL(string: "https://api.cognitive.microsoft.com/bing/v5.0/news/search?q=\(feedsArray[i])&count=3&mkt=en-in") 
     var request = URLRequest(url: url!) 
     request.setValue("My Subscription Key", forHTTPHeaderField: "Ocp-Apim-Subscription-Key") 

     Alamofire.request(request as URLRequest).responseJSON{response in 

      if let json = response.result.value as? [String:AnyObject]{ 


       if let value = json["value"]{ 

        // 
        print("json \(json)") 

        for j in 0..<value.count{ 

         let items = value[j] as! [String:AnyObject] 

         let name = items["name"] as! String 

         let url = items["url"] as! String 



         let description = items["description"] as! String 

         let datePublished = items["datePublished"] as! String 

         let dateAndTime = datePublished.replacingOccurrences(of: "T", with: " ") 

         self.feedsName.append(name) 
         self.feedsUrl.append(url) 
         self.feedsDescription.append(description) 
         self.feedsDatePublished.append(dateAndTime) 


         if let image = items["image"] as? [String:AnyObject]{ 

          if let thumbnail = image["thumbnail"] as? [String:AnyObject]{ 

           let contentUrl = thumbnail["contentUrl"] as! String 

           self.feedsContentUrl.append(contentUrl) 



          } 
         }else{ 
          self.feedsContentUrl.append(self.errorImage) 

         } 


         if let provider = items["provider"]{ 

          for i in 0..<provider.count{ 

           let items = provider[i] as! [String:AnyObject] 
           let providerName = items["name"] as! String 

           self.feedsProvider.append(providerName) 

          } 


         } 

         self.feedsTable.delegate = self 
         self.feedsTable.dataSource = self 
         self.feedsTable.reloadData() 


         self.defaults.set(self.feedsUrl, forKey: "feedsUrl") 
         self.defaults.set(self.feedsDescription, forKey: "feedsDescription") 
         self.defaults.set(self.feedsName, forKey: "feedsName") 
         self.defaults.set(self.feedsProvider, forKey: "feedsProvider") 
         self.defaults.set(self.feedsContentUrl, forKey: "feedsContentUrl") 
         self.defaults.set(self.feedsDatePublished, forKey: "feedsDatePublished") 







         print("All Counts \(self.feedsName.count)") 


        } 
       } 
      } 

     } 




    } 






} 
func slideOpen(){ 
    self.revealViewController().revealToggle(animated: true) 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 


    return feedsName.count 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "newsFeeds") as! newsFeeds 



    randomNumberArray = randomNumber() 

    //self.feedsRandomArray.append(self.feedsRandom) 

    print("feedsRandom \(feedsRandom)") 

    selectedRow = randomNumberArray[indexPath.row] 




    let url = URL(string: feedsContentUrl[randomNumberArray[indexPath.row]]) 

    do{ 
     let data = try Data(contentsOf: url!) 

     cell.feedsImage.image = UIImage(data: data) 

    }catch{ 
     print(error) 
    } 

    let tap = UITapGestureRecognizer(target: self, action: #selector(HomeViewController.tapFunction)) 

    let titleAttributes = [NSFontAttributeName: UIFont.preferredFont(forTextStyle: UIFontTextStyle.headline), NSForegroundColorAttributeName: UIColor.purple] 

    let titleString = NSAttributedString(string: feedsName[randomNumberArray[indexPath.row]] , attributes: titleAttributes) 
    cell.feedsHeadlines.isUserInteractionEnabled = true 
    cell.feedsHeadlines.addGestureRecognizer(tap) 
    cell.feedsHeadlines.attributedText = titleString 
    cell.feedsDescription.text = feedsDescription[randomNumberArray[indexPath.row]] 
    cell.feedsPublisherName.text = feedsProvider[randomNumberArray[indexPath.row]] 
    cell.publishedOn.text = feedsDatePublished[randomNumberArray[indexPath.row]] 

    //print("All Counts \(myFeedsName.count) \(myFeedsProvider.count) \(myFeedsContentUrl.count) \(myFeedsUrl.count) \(myFeedsDescription.count) \(myFeedsDescription.count)") 

    return cell 
} 

func tapFunction(sender:UITapGestureRecognizer) { 

    let safariVC = SFSafariViewController(url: NSURL(string: feedsUrl[selectedRow]) as! URL) 
    self.present(safariVC, animated: true, completion: nil) 
    safariVC.delegate = self 


} 

func safariViewControllerDidFinish(_ controller: SFSafariViewController) { 

    controller.dismiss(animated: true, completion: nil) 
} 

func randomNumber() -> [Int] { 


    let feedsIndex = feedsName.count - 1 
    var randomNumber = Int(arc4random_uniform(UInt32(feedsIndex))) 

    print("Randome number \(randomNumber) \(randomNumberArray)") 

    for k in 0..<randomNumberArray.count{ 
    while randomNumber == randomNumberArray[k] { 
     randomNumber = Int(arc4random_uniform(UInt32(feedsIndex))) 
    } 
    } 
    randomNumberArray.append(randomNumber) 
    self.defaults.set(self.randomNumberArray, forKey: "randomNumberArray") 


    return randomNumberArray 
} 

func retreiveMyArrayData(){ 


    myFeedsUrl = defaults.stringArray(forKey: "feedsUrl") ?? [String]() 
    myFeedsDescription = defaults.stringArray(forKey: "feedsDescription") ?? [String]() 
    myFeedsName = defaults.stringArray(forKey: "feedsName") ?? [String]() 
    myFeedsProvider = defaults.stringArray(forKey: "feedsProvider") ?? [String]() 
    myFeedsContentUrl = defaults.stringArray(forKey: "feedsContentUrl") ?? [String]() 
    myFeedsDatePublished = defaults.stringArray(forKey: "feedsDatePublished") ?? [String]() 
    myHoursVar = defaults.integer(forKey: "hoursVar") 
    myFeedsRandom = defaults.array(forKey: "randomNumberArray") as! [Int] 

    print("Values \(myHoursVar) \(myFeedsProvider) \(myFeedsUrl.count)") 







} 

答えて

1

あなたは.xib

Look this.

UITableViewDataSourceUITableViewDelegateを設定することができます
0
//Setting datasource & delegate for tableview inside viewDidLoad 
    override func viewDidLoad() { 
    super.viewDidLoad() 
    self.feedsTableView.delegate = self 
    self.feedsTableView.datasource = self 

    } 

は今、あなたはテーブルビューをリロードする必要がありますuserDefaultsに変更してください。 self.feedsTableView.reloadData()

これが役に立たなかった場合は、お知らせください。上記のプロジェクトの完全なワークフローを提供するために、もっと協力していきます。

関連する問題