0

サーバーベースのアプリを作成しています。データベースにリクエストを送信するたびに、すべてのサーバー接続コードを入力する必要があります。これをどうにかして再利用することは可能ですか?PHP では、通常、接続するたびに呼び出すことができる dbConnect.php (または同様のもの) を呼び出すファイルがあります。

例、私はいつも使用しているこれを置き換えたいと思います:

- (void)doSomething
{
__block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL: url]; 
__weak ASIHTTPRequest *request_b = request;
[request setDelegate: self]; 
[request addRequestHeader:@"Content-Type" value:@"text/html; charset=utf-8;"];
[request setDefaultResponseEncoding:NSUTF8StringEncoding]; 
[request setTimeOutSeconds: 10.0f]; 
[request setCachePolicy: ASIDoNotWriteToCacheCachePolicy | ASIDoNotReadFromCacheCachePolicy]; 

 //Set the variables here

    [request startAsynchronous];
}

...次のようなもので:

    - (void)doSomething
    { 
         LoadServerCode;  //This loads all the server code as above

         //Set variables 

         [request startAsynchronous];

    }

前もって感謝します

編集:

少し明確にするために。UILabel や特別な方法で UIView を作成するなど、私がよく使用するいくつかのメソッドがあるとします。 MyConstructionMethods か何か...つまり、アプリ内のいくつかの異なる場所にラベルを作成したい場合は、次のように入力するだけです。

MyGreenLabel; //Done, the label is created and added to the view

... それ以外の:

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 10)]; 
    label.backgroundColor = [UIColor greenColor]; 
    [self.view addSubview: label]; 
4

5 に答える 5

2

カスタム ASIHTTPRequest クラスを実装できます。

@interface YourRequest : ASIFormDataRequest
@end


@implementation YourRequest  

- (id)initWithURL:(NSURL *)newURL {
  self = [super initWithURL: newURL];

  if (self) {
      [self addRequestHeader:@"Content-Type" value:@"text/html; charset=utf-8;"];
      [self setDefaultResponseEncoding:NSUTF8StringEncoding]; 
      [self setTimeOutSeconds: 10.0f]; 
      [self setCachePolicy: ASIDoNotWriteToCacheCachePolicy | ASIDoNotReadFromCacheCachePolicy]; 
    }
  }

  return self;
}
@end

オブジェクトを作成します。

 - (void)doSomething { 
     __block YourRequest *request = [YourRequest requestWithURL: url]; 
     __weak ASIHTTPRequest *request_b = request;
     [request setDelegate : self];
     //Set variables 

     [request startAsynchronous];

 }
于 2012-06-01T15:53:34.930 に答える
2

うまくいけば、すべての接続クラスをコードの残りの部分から分離したままにしておくと、リクエストを作成して変数を設定し、非同期を開始するリクエストを返すメソッドを作成できないのはなぜですか...維持していなくても分離された接続のものは、このメソッドを持ついくつかのクラスの静的メソッドを持つことができます...

于 2012-06-01T15:52:04.870 に答える
1

ヘッダー ファイルでメソッドを宣言することができ、それらはクラスを使用するときに使用できます。したがって、.h ファイルで doSomthing を宣言し、そのメソッドを .m ファイルに実装することができます。[className doSomthing] さらにコードを表示したい場合は、「doSomthing」を呼び出すだけで、より良い例を示すことができます。

于 2012-06-01T15:52:45.900 に答える
1

同じ実装ファイルでそのセットアップ コードを複数回再利用する必要がある場合は、適切に構成された要求オブジェクトを返すユーティリティ メソッドを作成するためにExtract Methodでリファクタリングすることを検討してください。

この種のことを多数の場所で行う必要がある場合は、サブクラス化を検討してください。これASIFormDataRequestにより、最も一般的に設定するプロパティで構成されたリクエスト オブジェクトをより簡潔に作成できます。または、リクエスト オブジェクトを生成するための静的メソッドを使用して、ある種のリクエスト ファクトリ クラスを作成することもできます。

于 2012-06-01T15:52:26.707 に答える
1

マクロを使ってみましたか?

.h ファイル内:

#define LoadServerCode() \
__block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; \
__weak ASIHTTPRequest *request_b = request; \
[request setDelegate: self]; \
[request addRequestHeader:@"Content-Type" value:@"text/html; charset=utf-8;"]; \
[request setDefaultResponseEncoding:NSUTF8StringEncoding]; \
[request setTimeOutSeconds: 10.0f]; \
[request setCachePolicy: ASIDoNotWriteToCacheCachePolicy | ASIDoNotReadFromCacheCachePolicy];

次に、実装で:

-(void)doSomething {
    LoadServerCode();

    //Set variables

    [request startAsynchronous];
}
于 2012-06-01T21:05:59.790 に答える