如何从另一个类(在此特定类中创建)调用特定类的方法?

时间:2010-03-12 17:51:38

标签: iphone objective-c cocoa-touch three20

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

1 个答案:

答案 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