2016-04-28 2 views
2

Попытки установить XCGLogger и получать сообщение об ошибке:XCGLogger: Неоднозначная ссылка на член «войти»

Ambiguous reference to member 'log'

Я вижу этот вопрос уже был raised, но я не ясно, на решении ..

За установку руководство добавили эту глобальную константу к 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 
    } 

Затем в отдельных исходных файлах:

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

Что такое правильное использование?

+0

Где в AppDelegate сделал вас положить код? Является ли это в классе AppDelegate или глобальном? – ryantxr

+0

'nameOfYourProject.log.debug'? Но, вероятно, лучше переименовать 'log' в что-то другое. Вы смогли найти встречный идентификатор 'log'? – Sulthan

+0

@ryantxr: Обновленный вопрос –

ответ

4

Вопрос довольно прост. Если вы объявите log внутри AppDelegate, вы делаете переменную экземпляра. Для того, чтобы получить доступ к нему, вы должны получить доступ к нему в качестве переменной экземпляра:

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

Если вы хотите log быть доступны везде, вам придется сделать его глобальную константу:

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

let log = XCGLogger.defaultInstance() 

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

(нет необходимости объявлять его в файле AppDelegate, вы можете вставить его в любом месте своего кода)

или сделать его static:

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

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

и доступ к нему с помощью:

AppDelegate.log.debug(...) 

Для объяснения ambigious ссылки, есть математическая функция, называемая log, и есть также log функция в файле malloc.h. Поскольку вы передаете String в качестве первого параметра, и ни одна из двух функций не является совпадением, компилятор предупреждает вас, что он не знает, какую из двух функций вы хотите использовать.

+0

Получил это спасибо. Это была проблема с NOOB. –

+1

Такая же проблема, и теперь она решена! Благодаря ! – Shinichi

0

Кроме того, я предполагаю, что это лучше, чтобы создать глобальный постоянный файл и создать что-то вроде этого (если вы объявили журнал в AppDelegate):

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

, а затем просто использовать LOG.error("error")

Смежные вопросы