Die App, die benutzerdefinierte Aktualisierungssteuerung in mehreren VCs verwendet. Allerdings funktioniert nur einer von ihnen nicht und wirft den Betrefffehler auf.Unbekannter Selektor, der an Instanz gesendet wird [UIView setRefreshControl:]
Individuelle UIRefreshControl:
class CustRefreshCont: UIRefreshControl {
override init() {
super.init()
let noColor = UIColor.clear
let lightGrayColor = UIColor.lightGray
self.tintColor = lightGrayColor
self.backgroundColor = noColor
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
ich den Code in anderen VCs überprüft, scheint nichts anderes. Ich nehme an, der Fehler ist bei MainStoryboard irgendwie reparierbar (dh bei Inspector einer UIView?)
Vielen Dank im Voraus.
EDIT: Bereitgestellt Zusatzcode
Decleration:
let refreshControl = CustRefreshCont()
refreshControl.addTarget(self, action: #selector(PortfolioVC.refreshData), for: UIControlEvents.valueChanged)
// if it is iOS 10 and higher run new method
if #available(iOS 10.0, *) {
tableView.refreshControl = refreshControl
} else {
tableView.addSubview(refreshControl)
}
Funktion:
@objc private func refreshData(){
// Calculate elapsedTime
elapsedTime = Date().timeIntervalSince(lastRefresh)
convToInt = refreshRestrictSec - NSInteger(elapsedTime)
// If last refresh call was older then a minute
if NSInteger(elapsedTime) > refreshRestrictSec {
// Displaying text while updating
self.refreshControl.attributedTitle = NSAttributedString(string: "Updating data...", attributes: [NSAttributedStringKey.foregroundColor : UIColor.lightGray, NSAttributedStringKey.backgroundColor : UIColor.clear])
print(elapsedTime)
view.endEditing(true)
selectedCurrencies.removeAll()
// Pulling JSON data and updating selected Currencies
downloadCurrencies(completion: { (isComp, isErr) in
if Currencies.count > 0 {
syncValuesAtStored(cur: selectedCurrencies)
DispatchQueue.main.async {
calculateTotalWorth()
excludeNonePosses()
self.refreshControl.endRefreshing()
animateTableView(tableView: self.tableView)
self.collectionView.reloadData()
lastRefresh = Date()
}
} else {
print("Error on Refresh")
}
})
} else {
print(elapsedTime)
self.refreshControl.attributedTitle = NSAttributedString(string: "You can refresh \(convToInt) seconds later!", attributes: [NSAttributedStringKey.foregroundColor : UIColor.lightGray, NSAttributedStringKey.backgroundColor : UIColor.clear])
self.refreshControl.endRefreshing()
}
}
Der Fehler sagt Ihnen, dass eine einfache 'UIView' keine' refreshControl' Eigenschaft hat, die korrekt erscheint. Was passiert in dem Code, in dem dieser Fehler auftritt? (d. h. Wie verwenden Sie Ihre Unterklasse?) –
Hallo Philip, ich habe die Frage über zusätzlichen Code bearbeitet. Wenn die App abstürzt, wird AppDelegate angezeigt. Keine Codezeile, die ich eingegeben habe. Vielen Dank. – sc13
Wenn Sie dieses 'tableView.refreshControl = refreshControl' ausführen, können Sie überprüfen, was 'tableView' tatsächlich ist, indem Sie im Debugger drucken oder untersuchen? Wenn es sich um einen Tabellenansicht-Controller handelt, prüfen Sie, was seine 'view'-Eigenschaft auch ist. –