我创建了一个TTModelViewController。在createModel方法中,我创建了一个TTURLRequestModel。在TTURLRequestModel中加载内容之后,我想在我的TTModelViewController中调用一个方法。
TTModelViewController
- (void) createModel {
requestModel = [[singlePostModel alloc] initWithId:@"54"];
}
- (void)didLoadModel:(BOOL)firstTime {
NSLog(@"loaded");
}
TTURLRequestModel(singlePostModel)
- (void)requestDidFinishLoad:(TTURLRequest*)request {
//doing something
[super requestDidFinishLoad:request];
}
首先我认为在调用requestDidFinishLoad之后调用了“didLoadModel”,但是之前调用了它。
那么,如何在请求完成加载后调用TTModelViewController中的方法? 有没有一种方法已经做到了,我只需要覆盖它?或其他什么?
感谢
//如果知道如何使用three20知道如何做到这一点,任何人都可以告诉我一般如何做到这一点?
第一篇文章的解决方案现在工作正常,但我仍然收到警告,我调用我的对象的函数不存在:
@interface TTModelViewController {
}
- (void)modelFinishedLoading;
@end
现在我在我的模型类中调用该方法
[controller modelFinishedLoading];
此时xcode会发出警告“找不到-modelFinishedLoading方法”。
为什么呢?我在界面和TTModelViewController的实现部分实现了它。
这与我的singlePostModel中的@class有什么关系?
@class singlePostViewController;
@interface singlePostModel : TTURLRequestModel
答案 0 :(得分:2)
我这样做的方法是继承TTURLRequestModel
,我怀疑你已经根据你的班级名称(singlePostModel
)完成了这项工作。在该子类中,添加一个可用于指向TTModelViewController
的成员变量。类似的东西:
班级定义:
class TTModelViewController;
@interface singlePostModel : TTURLRequestModel {
TTModelViewController *controller;
}
- (id) initWithId:(String *)id forController:(TTModelViewController *)controller;
@end
实现:
@implementation singlePostModel {
- (id) initWithId:(String *)id forController:(TTModelViewController *)mvc {
if (self = [super initWithId:id]) {
controller = mvc;
}
}
- (void)requestDidFinishLoad:(TTURLRequest*)request {
[controller callMyMethodHere];
[super requestDidFinishLoad:request];
}
@end
当你初始化它时,你会使用:
- (void) createModel {
requestModel = [[singlePostModel alloc] initWithId:@"54" forController:self];
}
除非你有另一种方式来到你的TTModelViewController
,就像通过app delegate singleton一样,在这种情况下,只要你不介意耦合,这也可以正常工作。
例如,您的app delegate具有对应用程序的主View Controller的引用,因为它是从主NIB设置的。使用
可以轻松访问((MyAppDelegate *)[[UIApplication sharedApplication] delegate]).myMainViewController