我在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;
}
答案 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
。
至于你的委托事情,现在这完全合情合理,因为没有设置委托就不会在重新加载时调用这个方法。