Нераспознанный селектор отправлен в экземпляр - параметры LoadObjects UITableView и Restkit - PullRequest
0 голосов
/ 24 марта 2012

Я задал этот вопрос в группе Google restkit, но теперь понимаю, что это может быть более широкая проблема, а не специфическая для РК.

Я уже несколько часов хожу по кругу. Я пытаюсь заполнить UITableView данными, полученными из веб-сервиса и сохраненными в объектах с использованием сопоставления объектов RestKits. Ударяя по сервису, храня предметы, все работает прекрасно.

Проблема в том, когда я пытаюсь перезагрузить данные для таблицы. Я получаю эту ошибку -

'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 - это модель, которую я настроил. Если я не указываю делегата табличного представления как класс (который я знаю, что должен), тогда курсы отлично загружаются в табличное представление. Но я получу сообщение об ошибке, когда попытаюсь нажать на одну из ячеек (в didSelectRowAtIndexPath. тот факт, что я должен указать делегата, я знаю, что что-то действительно испортилось, и я не могу понять это.

Я предполагаю, что что-то выходит, когда это не должно, но данные находятся в массиве _courses. Кстати, это проект ARC.

Вот часть соответствующего кода, но если вам нужно больше, дайте мне знать. Если у кого-то есть информация, чтобы указать мне правильное направление, это было бы здорово! Спасибо за вашу помощь!

MainViewController.h 
@interface MainViewController : UITableViewController <CLLocationManagerDelegate, RKObjectLoaderDelegate, UITableViewDelegate, UITableViewDataSource> { 
IBOutlet UITableView *coursesTableView; 
NSArray *_courses; 
} 

@end 

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]; 

Методы делегата:

-(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; 
}

1 Ответ

2 голосов
/ 24 марта 2012

Я вижу это сейчас!Ваш метод делегата

-(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; 

}

неверен.NSArray не имеет метода с именем -text, поэтому он вызвал передачу нераспознанного селектора в NSArray.Почему компилятор не предупредил вас об этом?Если вам нужна строка, используйте -stringValue.

. А что касается вашего делегата, то теперь это имеет смысл, потому что не установка делегата не вызовет этот метод при перезагрузке.

...