0

我正在尝试向我在我的网络服务器上设置的后端 API 发送一些网络请求。但是,为了使事情通用,我想将整个 JSON 对象发送到后端,并在那里对数据进行所有过滤以确定请求的用途、要传递的参数等。

我将从一个类向不同的服务发出许多请求,所以我不想使用 NSURLConnection,因为它必须过滤完成处理程序中的所有结果以确定最初获取哪个请求。

我喜欢 NSURLConnection 如何允许您像这样附加 JSON 对象,但我想知道如何使用不同的方法(比如 [NSData dataWithContentsOfURL:])

NSMutableDictionary *postObject = [[NSMutableDictionary alloc] init];
[postObject setValue:@"login" forKey:@"request"];
[postObject setValue:inputUsername.text forKey:@"userName"];
[postObject setValue:inputPassword.text forKey:@"password"];

NSData *postData = [NSJSONSerialization dataWithJSONObject:postObject options:0 error:NULL];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"WEB_URL"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
[request setTimeoutInterval:20];

有什么建议么?

4

1 回答 1

1

我这样做的方法是创建一个带有 NSURLConnection 的 NSObject 类,并在该类上设置一个属性标签。然后你有 NSObject/NSURLConnection 类,当下载完成时,连接将自身返回给委托。您有一个像下面的 -(void)downloadFinished 示例这样的方法来处理委托中的回复。

在 NSObject 类中,您使用 NSJsonSerialization 将 NSDictionary 转换为 Json 并将其附加到 NSURLConnection。

我希望我可以将您链接到 Github 上的 JsonHelper 类,但是我还没有将它上传到 Github :(。

示例请求:

NSDictionary *post = [NSDictionary dictionaryWithObjectsAndKeys:@"Json_Value",@"Json_Key",nil];

JsonHelper *jsonHelper = [[JsonHelper alloc]initWithURL:@"http://mycoolwebservice.com" withDictionary:post
withMethod:@"POST" showIndicator:NO withDelegate:self withCache:NO];
[jsonHelper setTag:1];
[jsonHelper connectionStart];

代表回复示例:

-(void)downloadFinished:(id)sender
{
   if ([sender isKindOfClass:[JsonHelper class]]) {

    NSError *error = nil;
    JsonHelper *jsonHelper = (JsonHelper*)sender;
        NSData *data = [[NSData alloc]initWithData:jsonHelper.receivedData];
        NSString *returnString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];    

    if (jsonHelper.tag == 0) {

    // Do Something
    }

    else if (jsonHelper.tag == 1) {

    // Do Something Else
    }
  }    
}

使用这个例子编写自己的自定义类来做或多或少相同的事情应该不会太难。

于 2013-03-21T22:44:20.897 回答