2012-03-24 7 views
0

Ich habe diese Frage in der restkit google group gestellt, aber jetzt erkenne ich, dass es möglicherweise ein breiteres Problem ist und nicht RK-spezifisch.Unbekannter Selektor an Instanz gesendet - UITableView und Restkit LoadObjects Optionen

Ich habe in diesem ein paar Stunden im Kreis gewesen. Ich versuche, ein UITableView mit Daten zu füllen, die von einem Webservice abgerufen und in Objekten gespeichert wurden, die das RestKits-Objekt-Mapping verwenden. Den Service zu treffen, alle Objekte zu speichern funktioniert wunderbar.

Das Problem ist, wenn ich versuche, Daten für die Tabelle neu zu laden. Ich bekomme diesen Fehler -

'NSInvalidArgumentException', reason: '-[CoursesModel text]: unrecognized selector sent to instance and then app shuts down and 

takes me here: 
@autoreleasepool { 
return UIApplicationMain(argc, argv, nil, 
NSStringFromClass([RoundShoutAppDelegate class])); 
} 
Thread 1: signal SIGABRT 

CoursesModel ist das Modell, das ich eingerichtet habe. Wenn ich den Delegaten des Tableview nicht als Klasse (die ich weiß, dass ich muss) angeben, dann laden die Kurse perfekt in der Tabellenansicht. Aber ich werde einen Fehler bekommen, wenn ich versuche, auf eine der Zellen (didSelectRowAtIndexPath) zu klicken. Konzentriere mich also auf die Tatsache, dass ich einen Delegaten angeben muss, weiß ich, dass etwas wirklich durcheinander ist und ich kann es nicht herausfinden der zugehörigen Code.

ich etwas gehe davon losgelassen wird, wenn es nicht soll, aber in den _courses Arraydaten sind. ein ARC-Projekt durch die Art und Weise diese ist.

Hier einige, aber wenn Sie müssen mehr lassen Sie mich wissen. Wenn jemand irgendwelche Informationen überhaupt hat, um mich in die richtige Richtung zu zeigen, das würde fantastisch sein! Danke für Ihre Hilfe!

CoursesModel.h

@interface CoursesModel : NSObject { 
NSNumber* _courseID; 
NSString* _courseName; 
NSString* _city; 
NSString* _state; 
NSNumber* _distance; 
} 

@property (nonatomic, retain) NSNumber* courseID; 
@property (nonatomic, retain) NSString* courseName; 
@property (nonatomic, retain) NSString* city; 
@property (nonatomic, retain) NSString* state; 
@property (nonatomic, retain) NSNumber* distance; 
@end 

MainViewController.m

//Most of the code ommited for your sanity 
// All good up to this point 
- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects: 
(NSArray*)objects { 
//NSLog(@"Loaded courses %@", objects); 
_courses = objects; 
// There is data in _courses. 
NSLog(@"Loaded courses in array %@", _courses); 
[coursesTableView reloadData]; 

Delegatmethoden:

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { CGSize size = [[[_courses objectAtIndex:indexPath.row] text] sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(300, 9000)]; 
return size.height + 10; 
} 
+0

etwas ruft die Methode namens -text, post diese Methode, wenn es existiert, oder der Aufrufer. – CodaFi

+0

Soweit ich in meinem Code sagen kann, ist hier der einzige Ort, wo "Text" direkt referenziert wird - (CGFloat) tableView: (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath { \t CGSize size = [[[ _courses objectAtIndex: indexPath.row] Text] sizeWithFont: [UIFont SystemFontOfSize: 14] ConstrainedToSize: CGSizeMake (300, 9000)]; \t return size.height + 10; } --- Allerdings habe ich das auskommentiert und 50 zurückgegeben, um zu testen und der Fehler ist immer noch da. also rate ich, dass es nicht –

+0

@CodaFi ist - Danke für die Suche in das für mich. Lassen Sie es mich wissen, wenn Sie mehr Code benötigen. Ich nehme an, dass Code-Snippet nicht die "Text" -Referenz ist, die Sie suchen, also bin ich glücklich, an anderer Stelle zu graben. Danke noch einmal! –

Antwort

2

Ich sehe es jetzt! Ihre Delegiertenmethode

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

CGSize size = [[[_courses objectAtIndex:indexPath.row] text] sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(300, 9000)]; 

return size.height + 10; 

} 

ist falsch. NSArray hat keine Methode namens -text, daher wurde ein nicht erkannter Selektor an NSArray gesendet. Warum hat der Compiler Sie nicht davor gewarnt? Wenn Sie eine Zeichenfolge benötigen, verwenden Sie -stringValue.

Und für Ihre Delegierten Sache, das macht jetzt voll und ganz Sinn, denn nicht die Delegierten setzen würde diese Methode beim Neuladen nicht aufrufen.

+0

Zunächst einmal, danke für den Vorschlag (und für die Korrektur meiner Post auf das richtige Format). Ich habe den Delegierten wie vorgeschlagen geändert.Aber jetzt ist der Fehler: *** Beenden App aufgrund der nicht abgefangenen Ausnahme 'NSInvalidArgumentException', Grund: '- [CoursesModel stringValue]: unerkannter Selektor an Instanz gesendet Ich bekomme das Gefühl, dass etwas freigegeben wird, aber bin so verwirrt, weil das _courses-Array ist ausgefüllt. Wenn du noch mehr Zauber in deinen Ärmeln hast, bin ich ganz Ohr! Danke noch einmal! –

+0

Es ist nicht .... loswerden von StringValue dann, nur objectAtIndex ... es sollte möglicherweise abstürzen, einfach den Fehler buchen. – CodaFi

+0

Hier gehen Sie. Abgestürzt wie erwartet: *** Beenden der App aufgrund der nicht abgefangenen Ausnahme 'NSInvalidArgumentException', Grund: '- [CoursesModell sizeWithFont: constrainedToSize:]: unerkannter Selektor an Instanz –