我正在尝试在应用内重新创建浏览器。我创建了一个部分,用户可以在其中添加他/她喜欢的网站,以便可以在表格视图中显示它们。我正在使用第三方api来获取并显示所选网站的标题,描述和收藏夹图标。这就是它的工作方式。有两个视图控制器,第一个是浏览器本身,另一个是用户喜欢的表视图控制器,用户可以在其中查看其喜欢的网站。当用户在第一个视图控制器中点击“ +”号时,当前网址将使用UserDefaults保存在数组中(我在使用Codable保存时遇到了一些问题),然后在第二个视图控制器中,将表格视图填充到了用户已保存的每个URL的for循环。
问题如下:
当用户已经添加了各种网站时,它必须滚动查找所有他/她保存的内容。但是,每个tableview单元都会被回收,因此每次用户上下滚动时,它都会再次加载。
用户滚动时
使用的两个数组如下:
var modifiedURLS = defaults.object(forKey: "modifiedURLS") as! [String]
var nonModifiedURLS = defaults.object(forKey: "nonModifiedURLS") as! [String]
我正在使用两个数组,因为我正在使用的api(SwiftLinkPreview)仅在所请求的URL为正常URL时才起作用(.com之后没有其他内容) 因此,我要保存一个修改后的网址以使用此api访问Title,description和favicon属性,并保存一个nonModified网址,该网址完全存储用户要保存的网址
填充tableviewcontroller时的代码如下:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "favoritesCell", for: indexPath) as! BookmarkTableViewCell
let slp = SwiftLinkPreview(session: .shared, workQueue: SwiftLinkPreview.defaultWorkQueue, responseQueue: DispatchQueue.main, cache: DisabledCache.instance)
cell.titleWebLabel.text = "Loading title..."
cell.descriptionWebLabel.text = "Loading description..."
cell.urlLabel.text = nonModifiedURLS[indexPath.row]
for _ in 0...modifiedURLS.count - 1 {
// The following is an asynchronous request
slp.preview(modifiedURLS[indexPath.row], onSuccess: { result in
let titleIndex = result.index(forKey: SwiftLinkResponseKey.title) as! Dictionary<SwiftLinkResponseKey, Any>.Index
let title:String = result[titleIndex].value as! String
cell.titleWebLabel.text = title
let descriptionIndex = result.index(forKey: SwiftLinkResponseKey.description) as! Dictionary<SwiftLinkResponseKey, Any>.Index
let description:String = result[descriptionIndex].value as! String
cell.descriptionWebLabel.text = description
let favIconIndex = result.index(forKey: SwiftLinkResponseKey.image) as! Dictionary<SwiftLinkResponseKey, Any>.Index
let favIcon = result[favIconIndex].value
cell.favIconImageView.sd_setImage(with: URL(string: "\(favIcon as! String)"))
},
onError: { error in print("\(error)")})
}
return cell
}
可以在以下GitHub链接中找到该项目:https://github.com/francisc112/IssueBrowser