2016-04-28 12 views
2

Versuch XCGLogger einzurichten und Empfangsfehler:XCGLogger: Mehrdeutige Referenz an das Mitglied ‚log‘

Ambiguous reference to member 'log'

Ich sehe das Problem war bereits raised aber ich bin mir nicht klar auf die Lösung ..

pro die Führung installieren hinzugefügt, um diese globale konstante zu AppDelegate.swift:

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 
    var window: UIWindow? 
    let log = XCGLogger.defaultInstance() 

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     log.setup(.Debug, showThreadName: true, showLogLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: nil, fileLogLevel: .Debug) 
     return true 
    } 

dann in einzelnen Quelldateien:

import XCGLogger 
log.debug("A debug message") 

Was ist die richtige Verwendung?

+0

Wo in AppDelegate Sie tat den Code eingeben? Ist es in der AppDelegate-Klasse oder global? – ryantxr

+0

'nameOfIhrProjekt.log.debug'? Aber wahrscheinlich wird "log" in etwas anderes umbenannt. Konnten Sie den kollidierenden Bezeichner 'log' finden? – Sulthan

+0

@ryantxr: Aktualisierte Frage –

Antwort

4

Das Problem ist ziemlich einfach. Wenn Sie log innerhalb AppDelegate deklarieren, erstellen Sie eine Instanzvariable. Um darauf zuzugreifen, werden Sie es als Instanz-Variable zugreifen müssen:

(UIApplication.sharedApplication().delegate as! AppDelegate).log.debug("test") 

Wenn Sie log wollen überall erreichbar sein, müssen Sie eine globale Konstante machen:

In your AppDelegate, declare a global constant to the default XCGLogger instance.

let log = XCGLogger.defaultInstance() 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 
    var window: UIWindow? 

(es gibt keine Notwendigkeit, es in AppDelegate Datei zu deklarieren, können Sie es grundsätzlich überall in Ihrem Code)

oder machen Sie es static:

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 
    static let log = XCGLogger() 

und greifen Sie mit:

AppDelegate.log.debug(...) 

die mehrdeutige Referenz zu erklären, gibt es eine mathematische Funktion log, und es gibt auch eine log Funktion in der malloc.h-Datei bezeichnet. Da Sie als ersten Parameter eine String übergeben und keiner der beiden Funktionen eine Übereinstimmung ist, warnt der Compiler Sie, dass er nicht weiß, welche der beiden Funktionen Sie verwenden möchten.

+0

Hab es danke. Das war ein NOOB-Problem. –

+1

Das gleiche Problem und jetzt ist es gelöst! Vielen Dank ! – Shinichi

0

Auch ich denke, es ist besser globale Konstante-Datei zu erstellen und so etwas wie dies erstellen (wenn Sie in AppDelegate erklärt Protokoll haben):

let LOG = (UIApplication.sharedApplication().delegate as! AppDelegate).log 

und dann einfache Verwendung LOG.error("error")

Verwandte Themen