sprite kit - Swift Singleton for preloading Textures in the Delegate not Transferring data to other Classes -


i making spritekit game , trying use singleton preload textures in appdelegate can use instance of class textures in game scene later on. textures held correctly in singleton in delegate when try instance later in game scene sktexture arrays singleton empty. here code in appdelegate

func preloadallassets() {     var assets = assets()   //make instance of assets      let monkiesatlas = sktextureatlas(named: "monkies")     let monkiesatlasleft = sktextureatlas(named: "monkiesleft")     let bananaanimatedatlas = sktextureatlas(named: "banana")     let asteroidatlas1 = sktextureatlas(named: "smallasteroids")     let asteroidatlas2 = sktextureatlas(named: "mediumasteroids")     let asteroidatlas3 = sktextureatlas(named: "largeasteroids")     let menuatlas = sktextureatlas(named: "menu")      sktextureatlas.preloadtextureatlases([monkiesatlas, monkiesatlasleft, bananaanimatedatlas, asteroidatlas1, asteroidatlas2, asteroidatlas3, menuatlas], withcompletionhandler: {             //initialize different textures             assets.initatlases(monkiesatlas, monkiesatlasleft: monkiesatlasleft, bananaanimatedatlas: bananaanimatedatlas, asteroidatlas1: asteroidatlas1, asteroidatlas2: asteroidatlas2, asteroidatlas3: asteroidatlas3, menuatlas: menuatlas)             assets.initmonkies()             assets.initleftmonkies()             assets.initbananaframes()             assets.initsmallasteroids()             assets.initmediumasteroids()             assets.initlargeasteroids()             assets.initmenu()             println("finished preloading textures")         }) }  func application(application: uiapplication, didfinishlaunchingwithoptions launchoptions: [nsobject: anyobject]?) -> bool {     // override point customization after application launch.     fabric.with([crashlytics()])      //set assets     preloadallassets()      return true } 

here singleton assets

class assets : skscene {  static let sharedinstance = assets()  var monkiesatlas = sktextureatlas() var monkiesatlasleft = sktextureatlas() var bananaanimatedatlas = sktextureatlas() var asteroidatlas1 = sktextureatlas() var asteroidatlas2 = sktextureatlas() var asteroidatlas3 = sktextureatlas() var menuatlas = sktextureatlas()  //monkey textures used in scene var monkeytextures:[sktexture]! var monkeylefttextures:[sktexture]! var bananaframes:[sktexture]! var smallasteroidtextures:[sktexture]! var mediumasteroidtextures:[sktexture]! var largeasteroidtectures:[sktexture]! var menutextures:[sktexture]!  func initatlases(monkiesatlas:sktextureatlas, monkiesatlasleft:sktextureatlas, bananaanimatedatlas:sktextureatlas, asteroidatlas1:sktextureatlas, asteroidatlas2:sktextureatlas, asteroidatlas3:sktextureatlas, menuatlas:sktextureatlas) {     self.monkiesatlas = monkiesatlas     self.monkiesatlasleft = monkiesatlasleft     self.bananaanimatedatlas = bananaanimatedatlas     self.asteroidatlas1 = asteroidatlas1     self.asteroidatlas2 = asteroidatlas2     self.asteroidatlas3 = asteroidatlas3     self.menuatlas = menuatlas }  //init monkies textures func initmonkies() /*-> [sktexture]*/ {     //get textures atlas     //let monkiesatlas = sktextureatlas(named: "monkies")     var tempmonkeytextures = [sktexture]()     let numimages = monkiesatlas.texturenames.count     var = 1; <= numimages; i++ {                //put atlas images array of textures         tempmonkeytextures.append(monkiesatlas.texturenamed("monkey\(i)"))     }     //return tempmonkeytextures     self.monkeytextures = tempmonkeytextures }  //init monkies textures func initleftmonkies() /*-> [sktexture]*/ {     //get textures atlas     //let monkiesatlas = sktextureatlas(named: "monkiesleft")     var tempmonkeytextures = [sktexture]()     let numimages = monkiesatlas.texturenames.count     var = 1; <= numimages; i++ {                //put atlas images array of textures         tempmonkeytextures.append(monkiesatlas.texturenamed("monkeyleft\(i)"))     }     //return tempmonkeytextures     self.monkeylefttextures = tempmonkeytextures }  //set banana frames func initbananaframes() /*-> [sktexture]*/ {     //let bananaanimatedatlas = sktextureatlas(named: "banana")     var tempbananaframes = [sktexture]()     let numimages = bananaanimatedatlas.texturenames.count     var = 1; <= numimages; i++ {         tempbananaframes.append(bananaanimatedatlas.texturenamed("banana\(i)"))     }     //return tempbananaframes     self.bananaframes = tempbananaframes }  //init asteroids textures func initsmallasteroids() /*-> [sktexture]*/ {     //get textures atlas     //let asteroidatlas1 = sktextureatlas(named: "smallasteroids")     var tempasteroidtextures = [sktexture]()     let numimages = asteroidatlas1.texturenames.count     var = 1; <= numimages; i++ {                //put atlas images array of textures         tempasteroidtextures.append(asteroidatlas1.texturenamed("asteroid\(i)"))     }     //return tempasteroidtextures     self.smallasteroidtextures = tempasteroidtextures }  //init asteroids textures func initmediumasteroids() /*-> [sktexture]*/ {     //get textures atlas     //let asteroidatlas2 = sktextureatlas(named: "mediumasteroids")     var tempasteroidtextures = [sktexture]()     let numimages = asteroidatlas2.texturenames.count     var = 1; <= numimages; i++ {                //put atlas images array of textures         tempasteroidtextures.append(asteroidatlas2.texturenamed("asteroid\(i)"))     }     //return tempasteroidtextures     self.mediumasteroidtextures = tempasteroidtextures }  //init asteroids textures func initlargeasteroids() /*-> [sktexture]*/ {     //get textures atlas     //let asteroidatlas3 = sktextureatlas(named: "largeasteroids")     var tempasteroidtextures = [sktexture]()     let numimages = asteroidatlas3.texturenames.count     var = 1; <= numimages; i++ {                //put atlas images array of textures         tempasteroidtextures.append(asteroidatlas3.texturenamed("asteroid\(i)"))     }     //return tempasteroidtextures     self.largeasteroidtectures = tempasteroidtextures }  //init menu textures func initmenu() /*-> [sktexture]*/ {     //get textures atlas     //let menuatlas = sktextureatlas(named: "menu")     var tempmenutextures = [sktexture]()     let numimages = menuatlas.texturenames.count     var = 1; <= numimages; i++ {                //put atlas images array of textures         tempmenutextures.append(menuatlas.texturenamed("menu\(i)"))     }     //return tempmenutextures     self.menutextures = tempmenutextures } 

}

and here use singleton's sharedinstance in gamescene

self.monkeytextures = assets.sharedinstance.monkeytextures self.monkeylefttextures = assets.sharedinstance.monkeylefttextures self.bananaframes = assets.sharedinstance.bananaframes self.smallasteroidtextures = assets.sharedinstance.smallasteroidtextures self.mediumasteroidtextures = assets.sharedinstance.mediumasteroidtextures self.largeasteroidtextures = assets.sharedinstance.largeasteroidtectures self.menutextures = assets.sharedinstance.menutextures 

as can see setting [sktexture] variables in game scene singleton. when empty , game crashes. doing wrong singleton? kind of lot of code thank ton in advance help!

it bad idea have load in appdelegate in didfinishlaunchingwithoptions. rejected if load times taking long, or app killed system. make loading scene first view , load singleton class there. try out singleton.

    private let _sharedinstance = assets()      class assets {                  class var sharedinstance : assets {            return _sharedinstance          }       // rest of code here     } 

Comments