2

我在 google 上搜索了用于使用 RESTful Web 服务的不同方法和库。但是当我尝试旧库时,它们中的大多数要么已经过时,要么无法工作。这可能是因为其中一些已停产且与新 SDK 不兼容。

我已经尝试过 SBJSON、ASIHTTP、stig 和 jsonframework,但它们似乎都不起作用。

目前在 iOS 中使用哪些库来使用 RESTful Web 服务?如果任何人都可以使用相同的库提供示例教程的链接,那将会很有帮助。

4

3 回答 3

6

试试 RestKit:http: //restkit.org/

它是众所周知的,流行的,使用 XML 以及 JSON 并与 Core Data(响应 NSManagedObjects 映射)一起使用,这使得作为本地缓存的后端非常好。

于 2012-09-20T14:46:59.290 回答
3

为什么不使用 NSURLConnection 之类的 iOS API 类?(我认为需要iOS5或更高版本)

例如,您可以像这样调用 REST GET 操作:

NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
[req setHTTPMethod:GET];
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];//for https

connection = [[NSURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES];

其中 url 应该是一个指向你的 rest 服务操作 url 的 NSURL 对象。并声明相应的委托方法:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
    code = [httpResponse statusCode];

    NSLog(@"%@ %i",@"Response Status Code: ",code);

    [data setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)d {
    [self.data appendData:d];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {

    [[[UIAlertView alloc] initWithTitle:@"Error"
                                message:nil
                               delegate:nil
                      cancelButtonTitle:@"ok"
                      otherButtonTitles:nil] show];
    self.connection = nil;
    self.data = nil;
}

连接、数据和代码可以是实现类的局部变量。在这些变量中,您将存储建立的连接、接收到的 JSON 数据(或其他)以及响应 http 代码(如 200、404)。

最后,如果您计划调用安全的 REST 服务,请不要忘记包含 authenticationchallenge 委托。

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {

            //set the user and password loged in
            NSString *username = @"username";
            NSString *password = @"password";                        

            NSURLCredential *credential = [NSURLCredential credentialWithUser:username
                                                                     password:password
                                                                      persistence:NSURLCredentialPersistenceForSession];
            [[challenge sender] useCredential:credential forAuthenticationChallenge:challenge];

        }

希望这可以帮助!

于 2012-09-20T14:42:53.637 回答
0

使用内置NSURLSession然后NSJSONSerialization使用 Github 的Mantle框架将 JSON 字典映射到您的自定义 ObjC 对象。

于 2014-05-20T21:48:48.387 回答