目标c:我是否每次都要重新输入所有代码?

时间:2012-06-01 15:46:45

标签: iphone objective-c ios xcode

我正在制作基于服务器的应用。每次我向数据库发出请求时,都必须输入所有服务器连接代码。有可能以某种方式重用它吗?在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]; 

5 个答案:

答案 0 :(得分:2)

希望您保持所有连接类与其余代码隔离,然后为什么不能创建一个方法来创建您的请求设置您的变量并返回请求以启动异步...即使您不保持你的连接东西孤立你仍然可以有一个类的静态方法有这个方法...

答案 1 :(得分: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];

 }

答案 2 :(得分:1)

如果您需要在同一个实现文件中多次重用该设置代码,请考虑使用Extract Method进行重构,以创建一个返回正确配置的请求对象的实用程序方法。

如果您需要在许多地方执行此类操作,请考虑继承ASIFormDataRequest,以便您可以更简洁地创建具有最常设置的属性配置的请求对象。或者,您可以使用静态方法创建某种请求工厂类来生成请求对象。

答案 3 :(得分:1)

您可以在头文件中声明方法,这些方法在使用您的课程时可用。所以你可以在.h文件中声明doSomthing然后在.m文件中实现该方法,当你想要“doSomthing”时,只需调用[className doSomthing] 如果你想显示更多代码我可能会给你一个更好的例子

答案 4 :(得分: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];
}