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];
}

最初に、requestDidFinishLoadが呼び出された後に「didLoadModel」が呼び出されると思っていましたが、その前です。

では、リクエストの読み込みが完了した後に TTModelViewController でメソッドを呼び出すにはどうすればよいでしょうか? すでにそれを行う方法はありますか?これを上書きするだけで済みますか? または、他の何か?

ありがとう

// knowbody が three20 でこれを行う方法を知っている場合、一般的な方法を教えてもらえますか?

編集


最初の投稿の解決策は現在正常に機能していますが、オブジェクトに呼び出す関数が存在しないという警告がまだ表示されます。

@interface TTModelViewController {
}

- (void)modelFinishedLoading;

@end

そして今、モデルクラスでそのメソッドを呼び出します

[controller modelFinishedLoading];

この時点で、xcode は「no -modelFinishedLoading メソッドが見つかりません」という警告をスローします。

なぜ?インターフェイスと TTModelViewController の実装部分に実装しました。

それは私のsinglePostModelでこの@classと関係がありますか?

@class singlePostViewController;
@interface singlePostModel : TTURLRequestModel
4

1 に答える 1

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、カップリングを気にしない限り、それでも同様に機能します。

たとえば、アプリデリゲートは、メインのNIBから設定されているため、アプリケーションのメインのViewControllerへの参照を持っています。を使用して簡単にアクセスできます

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