1

我创建了一个 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];
}

首先我认为“didLoadModel”在 requestDidFinishLoad 被调用之后被调用,但它在之前。

那么,在请求完成加载后,如何在 TTModelViewController 中调用方法?有没有一种方法已经做到了,我只需要覆盖它吗?或者是其他东西?

谢谢

// 如果knowbody知道如何用three20做到这一点,任何人都可以告诉我一般如何做到这一点?

编辑


第一篇文章的解决方案现在可以正常工作,但我仍然收到警告说我调用我的对象的函数不存在:

@interface TTModelViewController {
}

- (void)modelFinishedLoading;

@end

现在我在我的模型类中调用该方法

[controller modelFinishedLoading];

此时 xcode 会抛出警告“找不到 -modelFinishedLoading 方法”。

为什么?我在接口中实现了它,也在 TTModelViewController 的实现部分中实现了它。

这与我的 singlePostModel 中的这个 @class 有关系吗?

@class singlePostViewController;
@interface singlePostModel : TTURLRequestModel
4

1 回答 1

2

我会这样做的方式是 subclass 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的 .

例如,您的应用程序委托具有对应用程序的主视图控制器的引用,因为它是从主 NIB 设置的。这很容易使用

((MyAppDelegate *)[[UIApplication sharedApplication] delegate]).myMainViewController
于 2010-03-16T01:10:29.283 回答