2016-07-05 12 views
1
gesendet

Ich bin neu in der Programmierung im Allgemeinen und vor allem iOS. Auch das ist meine erste Frage auf StackOverflow. Ich hoffe, ich fange nicht an, den Code falsch einzufügen.iOS Laden externer Daten mit JSON - Segue Absturz mit Fehler: [__NSCFNumber Länge]: unerkannter Selektor an Instanz

In meiner Anwendung muss ich laden und zeigen Sie einige JSON in einer Anwendung.

Ich habe es geschafft, ein Tutorial zu folgen und es an meine Bedürfnisse anzupassen, und so kann ich derzeit eine Liste von Daten in eine ListView laden, aber ich habe Probleme, den gesamten Beitrag in einer Detailansicht zu zeigen.

Ich habe eine Klasse für meine Post ViewController (Listen) und eine andere für meine Details ViewController (Details).

Dies ist, was das Problem Teil des Codes so weit (PostsViewController) aussieht:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 

    if ([[segue identifier] isEqualToString:@"showDetailView"]) { 

     NSIndexPath *ip = [self.tableView indexPathForSelectedRow]; 

     [[segue destinationViewController] getPost:[postsArray objectAtIndex:ip.row]]; 

    } 
} 

Verfahren es nennt, ist in der DetaisViewController:

- (void)getPost:(id)postObject { 

    currentPost = postObject; 

} 

Ich habe keine Ahnung, was ich Ich tue es falsch und bis zu diesem Moment habe ich noch immer kein tiefes Verständnis für das Innenleben von Obj-C, Compiler und so.

Ich mache dies als Test für einen Einstiegsjob, und ich erwarte, dass ich ein wenig mehr Tag für Tag lernen werde.

Außerdem ist der gesamte Fehler dies:

beenden app aufgrund nicht abgefangene Ausnahme 'NSInvalidArgumentException', Grund: '- [__ NSCFNumber Länge]: Unbekannter Selektor an Instanz gesendet 0xb000000000000083'

Bitte lassen Ich weiß, ob ich mehr Informationen vorlegen muss und entschuldige mich im Voraus für meine Noobnität.

Grüße!

+1

Der Name 'getPost' ist verwirrend. Es ist eher 'setPost'. Die Fehlermeldung besagt einfach, dass irgendwo ein "NSNumber" -Objekt statt eines erwarteten "NSString" -Objekts übergeben wird. Legen Sie den Ausnahmeblockpunkt fest, um herauszufinden, wo der Fehler auftritt. – vadian

+0

wahrscheinlich irgendwo in 'currentPost' erwarten Sie, dass etwas eine Zeichenkette ist und es tatsächlich eine Zahl ist (also war es eine Zahl in der JSON anstelle einer Zeichenkette) – Wain

+0

Um Ausnahme Breakpoint hinzuzufügen: https://developer.apple .com/library/ios/rezepte/xcode_help-breakpoint_navigator/artikel/hinzufügen_einer_exception_breakpoint.html – danh

Antwort

1

Danke allen.

Das war das Problem, ich hatte eine Methode für die DetailsView, die die Etiketten entsprechend ändern würde. Es wurde wie folgt festgelegt:

- (void)setLabels { 

    lblPostTitle.text = currentPost.postTitle; 
    lblPostBody.text = currentPost.postBody; 
    lblPostId.text = currentPost.postId; 
} 

Beim Debuggen, versuchte ich zuerst die currentPost.postTitle/Body/Id NSLog und es funktionierte. So erkannte ich, dass im JSONplaceholder postID eine Nummer war (http://jsonplaceholder.typicode.com/comments?postId=1).

Also, sobald ich die Nummer behandelt hat, hat alles gut geklappt.

- (void)setLabels { 

    lblPostTitle.text = currentPost.postTitle; 
    lblPostBody.text = currentPost.postBody; 

    NSString* pi = currentPost.postId; 
    lblPostId.text = [NSString stringWithFormat: @"Post ID: %@", pi]; 
} 

Und jetzt funktioniert es!

Wie auch immer, ich schätze alle Kommentare und werde weiter hart arbeiten, um diese Anfängerfehler zu vermeiden!

Mit freundlichen Grüßen!