gpt4 book ai didi

swift - tvos 10.0 出现错误

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

我正在开发 tvos 应用程序,它在 10.1(较新版本)上运行良好,但在我运行以前版本 (10.0) 时出现错误刷新后(1 分钟)。

error message is

enter image description here

我的代码是

NewsViewController

import UIKit
import Kingfisher
private let reuseIdentifier = "trenddingCell"
private let reuseIdentifierRegular = "regularCell"
class NewsViewController: UICollectionViewController {
@IBOutlet var mainCollectionView: UICollectionView!

let appDelegate = UIApplication.shared.delegate as! AppDelegate
var backgroundMessageLabel:UILabel?
var focusFlag:Bool = false
override func viewDidLoad() {
super.viewDidLoad()

NotificationCenter.default.addObserver(self, selector: #selector(NewsViewController.presentController(_:)), name: NSNotification.Name(rawValue: "videoInfo"), object: nil)

let menuPressRecognizer = UITapGestureRecognizer()
menuPressRecognizer.addTarget(self, action: #selector(NewsViewController.menuButtonAction(_:)))
menuPressRecognizer.allowedPressTypes = [NSNumber(value: UIPressType.menu.rawValue as Int)]
self.view.addGestureRecognizer(menuPressRecognizer)

self.tabBarController?.tabBar.preferredFocusedView
self.setNeedsFocusUpdate()
self.updateFocusIfNeeded()

}

func menuButtonAction(_ ges:UITapGestureRecognizer){

self.tabBarController?.tabBar.canBecomeFocused
self.tabBarController?.preferredFocusedView
self.tabBarController?.setNeedsFocusUpdate()
self.tabBarController?.updateFocusIfNeeded()
}

override func viewWillAppear(_ animated: Bool) {

if appDelegate.dataFeedDetail.feedType == "J" || appDelegate.dataFeedDetail.feedType == "L"{
self.title = "ON DEMAND"
}
else{
self.title = "ON DEMAND"
}

//WebTrends().eventForTabBarItemFocus("News", menu: "news")
WebTrends().eventForTabBarItemFocus("News", channelName: "", menu: "news")
appDelegate.viewController = self
appDelegate.playerViewController = self
if appDelegate.categoryNewsArray.count == 0{
addBackgroundMessageLabel()
}else{

removeBackgroundMessage()
mainCollectionView.isHidden = false
if !focusFlag{
mainCollectionView.reloadData()
}
}
focusFlag = false
}
func loadNewData() {

DispatchQueue.main.async(execute: { () -> Void in
if self.appDelegate.categoryNewsArray.count > 0 {
self.removeBackgroundMessage()
self.mainCollectionView.isHidden = false
self.mainCollectionView.reloadData()
}
})
}

// MARK: - Collection Data Source.
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
print("begin numberOfItemsInSection")

return appDelegate.categoryNewsArray.count

}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
print("begin cellForItemAt")

if indexPath.item == 0{

let cellTrendding = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! TrendingCollectionCell
let trindingValue = appDelegate.categoryNewsArray.object(at: indexPath.item) as! NSMutableDictionary
cellTrendding.trenddingLabelView.text = trindingValue.object(forKey: "title") as? String
print("end cellTrendding")

return cellTrendding
}else{

let cellRegular = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifierRegular, for: indexPath) as! RegularCollectionCell
let trindingValue = appDelegate.categoryNewsArray.object(at: indexPath.item) as! NSMutableDictionary
cellRegular.categoryLabelView.text = trindingValue.object(forKey: "title") as? String
print("end cellRegular")

return cellRegular
}
}

// MARK: - CollectionViewDelegate.
override func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
print("begin willDisplay")

if indexPath.item == 0{
guard let cell = cell as? TrendingCollectionCell else { fatalError("Expected to display a `TrendingCollectionCell`.") }
let trending = appDelegate.categoryNewsArray.object(at: indexPath.item)
cell.configureWithDataItems(trending as! NSMutableDictionary, jIndex: indexPath.item)
}else{
guard let cell = cell as? RegularCollectionCell else { fatalError("Expected to display a `RegularCollectionCell`.") }
let trending = appDelegate.categoryNewsArray.object(at: indexPath.item) as! NSMutableDictionary
print("appDelegate.categoryNewsArray====================\(trending.count)")
cell.configureWithDataItems(trending, jIndex: indexPath.item)
}
print("end willDisplay")

}


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize {
print("begin layout")
if indexPath.item == 0 {
return CGSize(width: view.frame.width, height: 410)
}else{
return CGSize(width: view.frame.width, height: 320)
}
}

override func collectionView(_ collectionView: UICollectionView, canFocusItemAt indexPath: IndexPath) -> Bool{
print("begin canFocusItemAt\(indexPath.item)")
return false
}

override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {

}

// MARK: - Present Controller.
func presentController(_ notification:Notification) {
print("begin presentController")

let notificationData:NSDictionary = NSDictionary(dictionary: notification.userInfo!)
focusFlag = true
let playerVC = self.storyboard?.instantiateViewController(withIdentifier: "VideoPlayerViewController") as! VideoPlayerViewController

playerVC.videoIdentifier = "NewsView"
playerVC.videoCategoryNameandTitle = notificationData.object(forKey: "channelname") as! String as NSString
playerVC.navigationName = "News/\(notificationData.object(forKey: "channelname") as! String)" as NSString
playerVC.indexPath = notificationData.object(forKey: "indexpath") as! Int
playerVC.seriesShowDfpUrl = notificationData.object(forKey: "dfptag") as! String as NSString!
playerVC.seriesShows_Array = notificationData.object(forKey: "metaData") as! NSArray
playerVC.videoMaxShow = notificationData.object(forKey: "max_show") as! String
playerVC.adInterval = notificationData.object(forKey: "adinterval") as! Int

playerVC.modalPresentationStyle = UIModalPresentationStyle.fullScreen
playerVC.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
self.view.window?.rootViewController?.present(playerVC, animated: true, completion: nil)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
KingfisherManager.shared.cache.clearMemoryCache()
KingfisherManager.shared.cache.clearDiskCache()
}

func addBackgroundMessageLabel(){
if backgroundMessageLabel == nil {
backgroundMessageLabel = UILabel(frame: CGRect.zero)
backgroundMessageLabel!.center = view.center
backgroundMessageLabel! = backgroundMessageLabel!.setLabelView(backgroundMessageLabel!, message: kNoDataMessage )
self.view.addSubview(backgroundMessageLabel!)
NSLayoutConstraint(item: backgroundMessageLabel!, attribute: NSLayoutAttribute.centerX, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.centerX, multiplier: 1, constant: 0).isActive = true
NSLayoutConstraint(item: backgroundMessageLabel!, attribute: NSLayoutAttribute.centerY, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.centerY, multiplier: 1, constant: 0).isActive = true
}

}
func removeBackgroundMessage(){
if self.backgroundMessageLabel != nil {
self.backgroundMessageLabel!.removeFromSuperview()
self.backgroundMessageLabel = nil
}

}
}

extension UILabel {
func setLabelView(_ label:UILabel, message:String) -> UILabel {
let backgroundMessageLabel = label
backgroundMessageLabel.text = message
backgroundMessageLabel.textAlignment = .center
backgroundMessageLabel.font = UIFont(name: "SFUIDisplay-Regular", size: 32.0)
backgroundMessageLabel.textColor = UIColor(red: 255.0/255.0, green: 255.0/255.0, blue: 255.0/255.0, alpha: 1.0)//UIColor.whiteColor()
backgroundMessageLabel.backgroundColor = .clear
backgroundMessageLabel.translatesAutoresizingMaskIntoConstraints = false
return backgroundMessageLabel

}
}

RegularCollectionCell

import UIKit
import Kingfisher

private let cellId = "appCellId"
class RegularCollectionCell: UICollectionViewCell, UICollectionViewDataSource, UICollectionViewDelegate {

@IBOutlet var categoryCollectionView: UICollectionView!
@IBOutlet var categoryLabelView: UILabel!
let appDelegate = UIApplication.shared.delegate as! AppDelegate
var dataItems = NSMutableDictionary()
var jsonIndex:Int!

// MARK: Configuration.
func configureWithDataItems(_ dataItems: NSMutableDictionary, jIndex:Int) {
self.dataItems = dataItems
categoryCollectionView.reloadData()
// categoryCollectionView.remembersLastFocusedIndexPath = true
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

let seriesShows_Array = self.dataItems.value(forKey: "max_shows") as? String
let topVideos = self.dataItems.value(forKey: "datafeed") as? NSArray
if seriesShows_Array != "" {
if topVideos!.count > Int(seriesShows_Array!)! {
return Int(seriesShows_Array!)! as Int
}
}
if topVideos != nil && topVideos!.count > 0{
print("Crash numberOfItemsInSection",topVideos!.count)
return topVideos!.count
}else{
return 0
}
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
print("begin cellForItemAt")
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! CustomCollectionCell
let topVideos = (self.dataItems.value(forKey: "datafeed") as! NSArray).object(at: indexPath.item) as! JsonModel

cell.custom_LabelView.text = topVideos.videoTitle as String
let thumnailURL = topVideos.videoThumbnail as String
print("thumnailURL",thumnailURL)
let validUrl = thumnailURL.checkValidUrl(thumnailURL as String)
print("validUrl",validUrl)

let url = URL(string: validUrl)
print("url",url!)

cell.custom_ImageView.kf.setImage(with: url!, placeholder: UIImage(named: "not_found"), options: [.transition(ImageTransition.fade(0.5))], progressBlock: nil, completionHandler: nil)
cell.custom_LabelView.fadeLength = 100.0
cell.custom_LabelView.shutdownLabel()
print("end cellForItemAt")
return cell
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

let dfpTag:String = self.dataItems.object(forKey: "dfp_tag") as! String
let adIntervalStr = self.dataItems.object(forKey: "ad_interval") as! String
let adInterval:Int!
if adIntervalStr == ""{
adInterval = 0
}else{
adInterval = Int(adIntervalStr)
}
let channelNameStr:NSString = self.dataItems.object(forKey: "title") as! String as NSString
let topVideos = self.dataItems.value(forKey: "datafeed") as! NSArray
let maxShow = self.dataItems.value(forKey: "max_shows") as! String
var tempDict: NSDictionary = [NSString:AnyObject]() as NSDictionary
tempDict = ["channelname": channelNameStr, "indexpath": indexPath.item, "dfptag": dfpTag, "adinterval": adInterval, "metaData": topVideos, "max_show": maxShow]
NotificationCenter.default.post(name: Notification.Name(rawValue: "videoInfo"), object: nil, userInfo:tempDict as? [AnyHashable: Any])
}
}

最佳答案

终于解决了这个问题。

替换

self.mainCollectionView.reloadItems(at: self.mainCollectionView.indexPathsForVisibleItems)

来自

self.mainCollectionView.reloadata

关于swift - tvos 10.0 出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42526127/

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