0

My app is working fine until an artist has no events. In the code below (a part of the whole code) the error is caused by the last line. The "case .Success:" is true because in the console I can see the json data. So the request and the response are good but "event" is not part of the returned json data when the selected artist has no upcoming events. Because "event" does not exist the app is crashing.

How can you prevent a crashing app when no events are present?

Hope you can help me.

Alamofire.request(.GET, "http://api.songkick.com/api/3.0/artists/\(songkickId)/calendar.json?apikey=myapikey").validate().responseJSON { response in
        switch response.result {
        case .Success:
            if let value = response.result.value {
                let json = JSON(value)
                // show the results of the request in the console
                print("JSON: \(json)")

                // get specific data from the result
                let resultsPage = json["resultsPage"]
                let results = resultsPage["results"]
                    let totalEntries = resultsPage["totalEntries"]
                    print("huh?: \(totalEntries)")
                let events = results["event"].array!

                var eventNumber = 0
                var maxEventNumberReached = false
                var gigNameInfoText: [String] = Array()
                var gigVenueInfoText: [String] = Array()
                var gigDateInfoText: [String] = Array()
                var gigLocationInfoText: [String] = Array()
                var gigTicketInfoText: [String] = Array()

                while (maxEventNumberReached == false) {

                    if eventNumber != events.count {
                        print("")
                        let name = events[eventNumber]["displayName"].string!
                        print("Naam van het feestje?: \(name)")
                        gigNameInfoText.append(name)

                        let venue = events[eventNumber]["venue"]
                        let venueName = venue["displayName"].string!
                        print("Wie organiseert het feestje?: \(venueName)")
                        gigVenueInfoText.append(venueName)

                        let date = events[eventNumber]["start"]
                        let yyyymmdd = date["date"].string!
                        print("Wanneer is het feestje?: \(yyyymmdd)")
                        gigDateInfoText.append(yyyymmdd)

Edit# Using the "if totalEntries != 0 {" solved my problem.

Alamofire.request(.GET, "http://api.songkick.com/api/3.0/artists/\(songkickId)/calendar.json?apikey=dC0drfE1zUZi0z0c").validate().responseJSON { response in
        switch response.result {
        case .Success:
            if let value = response.result.value {
                let json = JSON(value)
                // show the results of the request in the console
                print("JSON: \(json)")

                // get specific data from the result
                let resultsPage = json["resultsPage"]
                let results = resultsPage["results"]
                let totalEntries = resultsPage["totalEntries"]

                if totalEntries != 0 {

                    let events = results["event"].array!
                    var eventNumber = 0
                    var maxEventNumberReached = false
                    var gigNameInfoText: [String] = Array()
                    var gigVenueInfoText: [String] = Array()
                    var gigDateInfoText: [String] = Array()
                    var gigLocationInfoText: [String] = Array()
                    var gigTicketInfoText: [String] = Array()

                    while (maxEventNumberReached == false) {

                        if eventNumber != events.count {
                            print("")
                            let name = events[eventNumber]["displayName"].string!
                            print("Naam van het feestje?: \(name)")
                            gigNameInfoText.append(name)

Kind Regards,

Jeroen Kiewiet

JK_77
  • 67
  • 10
  • Do not force unwrap (!) objects which can be nil. Also `results["event"]` is not an array but Optional. Try `if let event = result["event"] as? [String] { print(event) }` replace `[String]` with `Event` Type – Khundragpan Jul 24 '16 at 18:59
  • Thank you for your answer but I do not get what you mean. This is because of my little knowledge in programming with swift. The replacement with Event Type is something I do not understand. I have tried several things but did not find a thing that will work. Therefore I give some more code, maybe you could help me further then. – JK_77 Jul 25 '16 at 18:02
  • JSON: { "resultsPage" : { "status" : "ok", "results" : { }, "perPage" : 50, "totalEntries" : 0, "page" : 1 } } fatal error: unexpectedly found nil while unwrapping an optional value Error message like you said. – JK_77 Jul 25 '16 at 18:12
  • solved my answer. I have changed the code in my question. – JK_77 Jul 25 '16 at 18:42

0 Answers0