Wie bekomme ich einen Verweis auf den App-Delegierten in Swift?
Letztendlich möchte ich die Referenz verwenden, um auf den Kontext des verwalteten Objekts zuzugreifen.
Die andere Lösung ist insofern korrekt, als Sie einen Verweis auf den Delegaten der Anwendung erhalten. Dies ermöglicht jedoch nicht den Zugriff auf Methoden oder Variablen, die von Ihrer Unterklasse von UIApplication hinzugefügt wurden, wie z. Um dies zu beheben, müssen Sie einfach auf "AppDelegate" oder auf das, was auch immer Ihre UIApplication-Unterklasse heißt, einen Downcast ausführen. So wie:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let aVariable = appDelegate.someVariable
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let aVariable = appDelegate.someVariable
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let aVariable = appDelegate.someVariable
Swift 4.2
In Swift, leicht zugänglich in Ihren VCs
extension UIViewController {
var appDelegate: AppDelegate {
return UIApplication.shared.delegate as! AppDelegate
}
}
Fügen Sie AppDelegate-Klasse am Ende des Codes hinzu
func appDelegate () -> AppDelegate
{
return UIApplication.shared.delegate as! AppDelegate
}
AppDelegate-Referenz in Ihrer Klasse verwenden?
AppDelegate-Methode aufrufen
appDelegate (). setRoot ()
Es ist so ziemlich das gleiche wie in Objective-C
let del = UIApplication.sharedApplication().delegate
Dies kann für OS X verwendet werden
let appDelegate = NSApplication.sharedApplication().delegate as AppDelegate
var managedObjectContext = appDelegate.managedObjectContext?
Hier ist die Swift 2.0 Version:
let delegate = UIApplication.sharedApplication().delegate as? AppDelegate
Und um auf den verwalteten Objektkontext zuzugreifen:
if let delegate = UIApplication.sharedApplication().delegate as? AppDelegate {
let moc = delegate.managedObjectContext
// your code here
}
oder mit guard:
guard let delegate = UIApplication.sharedApplication().delegate as? AppDelegate else {
return
}
let moc = delegate.managedObjectContext
// your code here
Abgesehen von dem, was hier erzählt wird, habe ich den Import UIKit verpasst:
import UIKit
Erstellen Sie eine Methode in AppDelegate-Klasse für z
func sharedInstance() -> AppDelegate{
return UIApplication.sharedApplication().delegate as! AppDelegate
}
und nenne es irgendwo anders für Ex
let appDelegate : AppDelegate = AppDelegate().sharedInstance()
func sharedInstance() -> AppDelegate{
return UIApplication.shared.delegate as! AppDelegate
}
1) Stellen Sie sicher, dass Sie import UIKit
2) let appDelegate = UIApplication.sharedApplication().delegate! as! AppDelegate
Versuchen Sie einfach folgendes:
Swift 4
// Call the method
(UIApplication.shared.delegate as? AppDelegate)?.whateverWillOccur()
wo in Ihrer AppDelegate:
// MARK: - Whatever
func whateverWillOccur() {
// Your code here.
}
Hier ist eine Erweiterung für UIApplicationDelegate
, die den harten Code des AppDelegate
-Klassennamens vermeidet:
extension UIApplicationDelegate {
static var shared: Self {
return UIApplication.shared.delegate! as! Self
}
}
// use like this:
let appDelegate = MyAppDelegate.shared // will be of type MyAppDelegate
es ist sehr einfach
App-Delegat-Instanz
let app = UIApplication.shared.delegate as! AppDelegate
sie können eine Methode mit einer einzeiligen Syntax aufrufen
app.callingMethod()
sie können mit diesem Code auf eine Variable zugreifen
app.yourVariable = "Assigning a value"
In meinem Fall fehlte import UIKit
auf meiner NSManagedObject
-Unterklasse . Nach dem Import konnte ich diesen Fehler entfernen, da UIApplication
der Teil von UIKit
Hoffe es hilft anderen !!!
extension AppDelegate {
// MARK: - App Delegate Ref
class func delegate() -> AppDelegate {
return UIApplication.shared.delegate as! AppDelegate
}
}
Ich verwende das in Swift 2.3.
1. in der AppDelegate-Klasse
static let sharedInstance: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
2. AppDelegate mit anrufen
let appDelegate = AppDelegate.sharedInstance
In Swift 3.0 können Sie die appdelegate
-Referenz durch
let appDelegate = UIApplication.shared.delegate as! AppDelegate
Im XCode 6.2 funktioniert dies ebenfalls
let appDelegate = UIApplication.sharedApplication().delegate! as AppDelegate
let aVariable = appDelegate.someVariable
Ab iOS 12.2 und Swift 5.0 ist AppDelegate
kein anerkanntes Symbol. UIApplicationDelegate
ist. Antworten, die sich auf AppDelegate
beziehen, sind daher nicht mehr korrekt. Die folgende Antwort ist richtig und vermeidet Force-Unwrapping, das einige Entwickler als Codegeruch betrachten:
import UIKit
extension UIViewController {
var appDelegate: UIApplicationDelegate {
guard let appDelegate = UIApplication.shared.delegate else {
fatalError("Could not determine appDelegate.")
}
return appDelegate
}
}