发送到实例的无法识别的选择器 - UITableView和Restkit LoadObjects选项

时间:2012-03-24 00:24:21

标签: objective-c ios uitableview xcode4.2 restkit

我在restkit google小组中提出了这个问题,但现在意识到它可能实际上是一个更广泛的问题而不是RK特定的。

我已经在这个圈子里绕了几个小时。我正在尝试使用从Web服务检索的数据填充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是我设置的模型。如果我没有将tableview的委托指定为类(我知道我必须这样),那么这些课程会在表视图中完美加载。但是当我尝试点击其中一个单元格时(在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 个答案:

答案 0 :(得分:2)

我现在看到了!你的委托方法

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

至于你的委托事情,现在这完全合情合理,因为没有设置委托就不会在重新加载时调用这个方法。