2016-07-29 12 views
0

Ich bekomme alle Daten von einem Server und analysiere sie mit JSON. Nachdem ich jede Geschichte bekommen hatte, machte ich eine Klasse namens MyStory.Meine Anwendung läuft nicht auf dem iPhone/iPad, läuft aber gut im Simulator

class MyStory: NSObject 
{ 
    var location = "" 
    var storyId = 0 
    var title = "" 
    var story = "" 
    var AllImages = [Image]() 

    var images = NSArray() { 
     willSet(newValue){ 

      // print("newvalue \(newValue)") 

      for obj in newValue { 
       let img = Image(dictionary: obj as! [String : AnyObject]) 
       AllImages.append(img) 

       //imagePaths.append(img.imagePath) 
       let helper = HelperClass() 

       var imageDetail = "http://www.sleeksolutions.net/saad/" + img.imagePath 
       helper.imagepath.append(imageDetail) 



       //print("counter: \(helper.imagepath.count)") 

      } 
     } 
    } 

    init(dictionary: [String:AnyObject]) { 
     super.init() 
     self.setValuesForKeysWithDictionary(dictionary) 
    } 

    override func setValue(value: AnyObject?, forKey key: String) { 
     if key == "images" 
     { 
      // print("key = \(key) , value : \(value)") 
     } 
     //error occurs here. 
     super.setValue(value, forKey: key) 
    } 

} 

Und diese Funktion wird durch die Klasse SeeStories genannt. Hier ist der Code:

let session = NSURLSession.sharedSession() 
let request = NSMutableURLRequest(URL: url!) 
request.timeoutInterval = 10 
request.HTTPMethod = "GET" 

let task = session.dataTaskWithRequest(request) 
{ 
    (dat, res, er) in 

    if er == nil 
    { 
     do 
     { 
      print("m hereeee") 
      self.serverStatus = true 

      let jsonObject = try NSJSONSerialization.JSONObjectWithData(dat!, options: .MutableContainers) 
      let arr = jsonObject as! NSDictionary 

      //print(jsonObject) 

      let storiees = arr["stories"] as! NSArray 

      for obj in storiees{ 
       //Calling to MyStory Class here 
       let s = MyStory(dictionary: obj as! [String : AnyObject]) 
       self.stories.append(s) 

       let stat = self.fetch(s) 

       if stat == false 
       { 
        self.saveInCoreData(s) 
       } 
      } 
     } 
    } 
} 

Here is the picture of error in terminal

+0

eine Ausnahme – Shubhank

+0

Bitte Haltepunkt fügen Sie den Code zeigen Sie mir in 'setValuesForKeysWithDictionary' Methode – zylenv

+0

Verwenden Sie eine externe Bibliothek? –

Antwort

0

Überprüfen Sie das Wörterbuch Sie bekommen (die Sie ein MyStory Objekt zu erstellen, verwenden). Vom Aussehen her, storyId wird als String zurückgegeben und Sie versuchen, es in eine long zu speichern. storyId sollte Setup als String Variable statt

class MyStory: NSObject 
{ 
    var location = "" 
    var storyId = "" //THIS instead of = 0 
    var title = "" 
    var story = ""... 

seine Ich könnte falsch sein, aber das ist meine beste Vermutung aus dem Fehlerprotokoll in Ihrer Frage angezeigt.

+0

Ich tat dies, aber nichts nützliches. Sie haben Recht, der Fehler tritt bei storyId auf. Ich füge den Ausnahme-Breakpoint hinzu. Aber ich kann das nicht lösen. Meine App funktioniert gut im Simulator. –

+0

Haben Sie etwas dagegen, uns zu zeigen, wie eines der Wörterbücher aussieht? Das könnte einen Hinweis geben – lostInTransit

+0

Mit Ihrer Hilfe StoryId Fehler ist behoben, aber es ist ein weiterer Fehler auf ImagePath. Bild Klasse: NSObject { var path = "http://www.sleeksolutions.net/saad/" var imageId: Int = 0 var imagePath: String = "" var imageURL: String { return self .Pfad + imagePath } init (Wörterbuch: [String: ANYOBJECT]) { super.init() // hier ist der Fehler self.setValuesForKeysWithDictionary (Wörterbuch) } } –

0

Möglicher Grund ist, dass Sie einen String-Typ Variable verwenden und es enthält einige Long-Wert, der in Absturz führt.

Sie können den Ausnahme-Breakpoint setzen, um die genaue Codezeile zu identifizieren, die für den Absturz verantwortlich ist und diese beheben.

enter image description here

enter image description here

+0

Ich habe die Ausnahme Breakpoint hinzugefügt und es gibt mir so etwas : TravelStories [16832: 647878] - [__NSCFString longValue]: unerkannter Selektor an Instan gesendet 0x14659d60 –

+0

Der Fehler kommt auf storyId –

0

Ich fand die Antwort. Mein Wörterbuch übergibt mir einen String-Wert und ich habe Int-Wert gespeichert. Also in der init Methode habe ich das so:

imgid = wörterbuch ["imageId"]! imageId = String (imgid als! String)!

Es funktionierte ... Dank all :)