2015-06-16 2 views
1

Я создал синглтон для моего приложения iOS для доступа к определенным вещам во всем мире. Когда я запускаю приложение int в симуляторе или на моем iPhone/iPad, он остается на экране запуска и никогда не достигает метода appdelegates didFinishLaunchingWithOptions (я пытался его напечатать). Если я удалю синглтон и просто оставлю методы и переменные глобальными, он отлично работает. Что оставляет меня поверить, что это синглтон, вызвавший этот крах. Вот код, который я использую. Если я прокомментирую строки, которые в настоящее время прокомментированы, он отлично работает в этом «gameName» в любом месте моего кода, но я знаю, что это не очень хорошая практика, поэтому, если я раскомментирую их и получаю доступ к синглону, подобному этому, «Global.sharedInstance.gameName» - это когда приложение не запускается. Я вызываю этот синглтон много раз во всем приложении, поэтому я не уверен, что это проблема.Swift 1.2 Singleton заставляет приложение не запускать

//class Global { 
// 
// static let sharedInstance = Global() 
// 
// private init() { 
//  println("Global Singleton created"); 
// } 

private var optionsModel = OptionsModel() 
private var gamesModel = GamesModel() 
private var savesModel = SavesModel() 

var device = (UIApplication.sharedApplication().delegate as! AppDelegate).device 
var screenWidth = (UIApplication.sharedApplication().delegate as! AppDelegate).window!.bounds.width 
var screenHeight = (UIApplication.sharedApplication().delegate as! AppDelegate).window!.bounds.height 
var context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext! 
var PI = CGFloat(M_PI) 
var gameIndex = 0 
var player: AudioPlayer! 
var gameLevel = "" 

func loadSong(name: String, loops: Int) { 
    player = AudioPlayer(name: name, loopCount: loops) 
} 

func playAduio(fileName: String) { 
    loadSong("\(fileName)Audio", 0) 
    player!.play() 
} 

var gameName: String { 
    get { 
     return gamesModel.getName(gameIndex) 
    } 
} 

var gameDescription: String { 
    get { 
     return gamesModel.getDescription(gameIndex) 
    } 
} 

var gameIntervals: NSTimeInterval { 
    get { 
     return gamesModel.getIntervals(gameIndex) 
    } 
} 

var gameNeedsMic: Bool { 
    get { 
     return gamesModel.getMic(gameIndex) 
    } 
} 

var gameNeedsSpeech: Bool { 
    get { 
     return gamesModel.getSpeech(gameIndex) 
    } 
} 

var appLocked: Bool { 
    get { 
     return optionsModel.appLocked 
    } 
    set { 
     optionsModel.appLocked = newValue 
    } 
} 

var supervisorLoggedIn: Bool { 
    get { 
     return optionsModel.supervisorLoggedIn 
    } 
    set { 
     optionsModel.supervisorLoggedIn = newValue 
    } 
} 

var themeSongMuted: Bool { 
    get { 
     return optionsModel.themeSongMuted 
    } 
    set { 
     optionsModel.themeSongMuted = newValue 
    } 
} 

var gameCount: Int { 
    get { 
     return optionsModel.gameCount 
    } 
    set { 
     optionsModel.gameCount = newValue 
    } 
} 

var gameHighscore: Int { 
    get { 
     return savesModel.getHighscore(gameIndex) 
    } 
    set { 
     savesModel.setHighscore(newValue) 
    } 
} 

var gameStarCount: Int { 
    get { 
     return savesModel.getStarCount(gameIndex) 
    } 
    set { 
     savesModel.setStarCount(newValue) 
    } 
} 
//} 
+0

Вы показываете объявление класса своего глобального класса, которое закомментировано. Наверняка это ошибка редактирования, и 'class Global {' не должен быть прокомментирован? –

+0

Спасибо, но я уже исправил проблему. Однако это не было ошибкой. Создание функций и переменных вне класса делает их глобальными для всего проекта. Это был единственный способ, которым я мог заставить его работать, прежде чем я понял, в чем проблема. –

ответ

1

Глупо меня. Я починил это.

Проблема заключалась в том, что (это, вероятно, очевидно для некоторых из вас, но одно для меня одно), синглтон загружен до загрузки делегата приложения, а некоторые из переменных в singleton пытались получить информацию от делегата приложения до него был создан так, что это вызвало этот крах. Изменен так, чтобы я не загружал информацию до тех пор, пока не был загружен делегат приложения, и теперь он работает.

+0

Я собирался сказать вам, что, скорее всего, есть петля где-то, где вещи бесконечно пытаются получить доступ друг к другу через зависимости. – TheCodingArt

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