gpt4 book ai didi

ios - 使用 UserDefaults 填充值时 TableView reloadData() 不起作用

转载 作者:行者123 更新时间:2023-11-28 06:26:32 26 4
gpt4 key购买 nike

我正在从事一个向用户显示新闻提要的项目。

我正在调用函数 getNewsFeeds() 来获取新闻提要。

我将每隔一小时生成一次新的新闻提要

    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() 获取数据时,我不知道在哪里设置我的 tableViewDataSOurce 和 Delegate 方法以及 reloadData 来填充 tableView

 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)")







}

最佳答案

您可以将UITableViewDataSourceUITableViewDelegate设置到.xib

Look this.

关于ios - 使用 UserDefaults 填充值时 TableView reloadData() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41687611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com