2017-12-15 1 views
0

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() 
    } 
} 
+0

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?) –

+0

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

+0

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. –

Antwort

0

Nach dem Löschen und Wiederverbindungs ​​Auslass tableview aus verwandten VC (PortfolioVC) auf MainStoryboard festen der Fehler. Daher muss dies ein Fehler von xCode sein.

Verwandte Themen