从对象获取数据,使用NSURLConnection

时间:2012-02-26 22:00:46

标签: objective-c cocoa delegates nsurlconnection

我有一个类,使用NSURLConnection获取一些数据。它的方法getData向服务器创建请求,当收到一些数据时,方法connection:didRecieveData:更新一些属性。

- (void)getData
{
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:dataURL];
    NSURLConnection *connectionWithRequest = [NSURLConnection connectionWithRequest:request delegate:self];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    // Processing data
    dataProperty = processedData;
}

问题是,当我创建此类的实例并调用方法getData时,我无法立即获取对象的属性,因为尚未收到数据。我已经阅读了关于代理和协议的Apple参考,但我不明白如何为这个类实现委托方法,这对于connection:didRecieveData:来说就像NSURLConnection一样。

你能解释一下如何做到这一点吗?如果您只是发布一个示例链接,我会很高兴。谢谢。

2 个答案:

答案 0 :(得分:0)

  

我不明白如何为这个类实现委托方法,就像连接一样:didRecieveData:用于NSURLConnection。

与NSURLConnection相同:

  1. 为此对象指定名为delegate
  2. 的属性
  3. 将该属性设置为另一个对象。
  4. connectionDidReceiveData:中,向代表发送消息。
  5. 在委托中,实现另一个对象将要调用的方法。

答案 1 :(得分:0)

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"YOUR API URL"]];

    NSString *email = @"username@gmail.com";
    NSString *password = @"123456";
    NSString *deviceToken = @"simulator";
    NSString *deviceType = @"1";

    NSString *post = [NSString stringWithFormat:@"email=%@&password=%@&deviceToken=%@&deviceType=%@",email,password,deviceToken,deviceType];

    NSData *requestBodyData = [post dataUsingEncoding:NSUTF8StringEncoding];
    request.HTTPMethod = @"POST";
request.HTTPBody = requestBodyData;
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse response, NSData responseData, NSError *error)
     {
         NSLog(@"%@",responseData);
         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:nil];
         NSLog(@"%@",dic[@"data"]);
    }];