iPhone:如何从Web应用程序获取数据?

时间:2009-12-31 18:30:17

标签: iphone objective-c api web-applications

很抱歉,如果这是一个愚蠢的问题,但我是新手。

我开始使用iPhone应用程序开发,并希望创建一个涉及从Web服务中提取数据的应用程序。

假设网址为http://myapp.com/api/people/fetchall,它会返回XML数据。

  • 如何将此数据存入我的iPhone应用程序?

更新在做了一些研究后,我决定(在服务器端)我想实现一个返回JSON的RESTful API。所以我的iPhone应用程序最终将成为一个REST客户端。

资源:

到目前为止,我发现了一些有用的链接:

3 个答案:

答案 0 :(得分:3)

好的,你已经分解了要点,这是一个好的开始。

首先,Web应用程序需要其API以一种可以由客户端轻松解析的格式返回数据,无论它们是iPhone应用程序还是其他任何东西。出于这个原因,许多Web应用程序使用JSON或XML。 HTML不是传输数据的好格式,HTML有助于标记要呈现的文本。

首先,编写您的Web应用程序以返回XML或JSON格式的响应。如果您有时间,可以让您的Web应用程序同时执行这两项操作,并将响应指定的格式指定为参数。

要将数据从网络应用程序下载到iPhone应用程序,您需要建立URL连接并从其中一个API调用中下载数据。

例如,如果您的API有一个方法可以返回有关用户的一些信息,您需要在iPhone客户端中建立一个http请求,并通过API URL将其发送到服务器,指定是否是GET或PUT或其他类型的http请求。

有趣的课程是NSURLRequest,它是可变对应的NSURLConnection和它的委托协议,NSURLConnectionDelegate

解析数据将取决于它的格式。对于XML,您可以使用iPhone SDK中提供的XML解析器NSXMLParser

如果您要使用JSON,可以使用iPhone上提供的JSON解析库之一。就个人而言,我使用了TouchJSONJSON-Framework

要填充表格视图,您需要实施UITableViewDataSource方法中的几种方法,以及UITableViewDelegate中的一些方法。阅读UITableView类和上述协议的文档应该为您提供足够的信息来开始使用它们。

我希望这会有所帮助,并为您提供了解更多信息的起点。

答案 1 :(得分:2)

看看Three20项目 - Facebook iPhone应用程序的开发人员Joe Hewitt,他的很多工作都是开源的,包括一个表视图类,可以使用来自网络

答案 2 :(得分:0)

非常简单...... 这里有一些链接可以帮助您入门 http://mobiledevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html

本教程将告诉您如何对plist文件进行必要的更改以及如何告知您的应用从URL启动。其次,代码需要在app委托类的方法中完成,命名为:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
来自网址的

...获取您需要的所有信息,并从中调用JSON Web服务。调用JSON的一个例子是:

[[AFCoVuAPIClient sharedClient] getPath:@"whatever.json"
                                         parameters:[NSDictionary dictionaryWithObject:loginSessionKey forKey:@"login_session_key"]
                                            success:^(AFHTTPRequestOperation *operation, id responseObject) {
                                                NSLog(@"Did logout successfully on app termination");

                                                [application endBackgroundTask: background_task]; //End the task so the system knows that you are done with what you need to perform
                                                background_task = UIBackgroundTaskInvalid; //Invalidate the background_task
                                            }
                                            failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                                                NSLog(@"Did NOT logout successfully on app termination");
                                            }];

你可以将数据保存在你的单身类

你的AFCovuAPIClient类.h文件看起来像

#import "AFHTTPClient.h"

@interface AFCoVuAPIClient : AFHTTPClient    

+(AFCoVuAPIClient *)sharedClient;

@end

和AFCOvuAPIClient.m文件看起来像这样     #import“AFCoVuAPIClient.h”

#import "AFJSONRequestOperation.h"

@implementation AFCoVuAPIClient

+(AFCoVuAPIClient *)sharedClient {
static AFCoVuAPIClient *_sharedClient = nil;

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_sharedClient = [[AFCoVuAPIClient alloc] initWithBaseURL:[NSURL URLWithString:@"url goes here"]];
});

return _sharedClient;
}

-(id)initWithBaseURL:(NSURL *)url {
self = [super initWithBaseURL:url];
if (!self) {
    return nil;
}

[self registerHTTPOperationClass:[AFJSONRequestOperation class]];

[self setDefaultHeader:@"Accept" value:@"application/json"];

return self;
}

@end

希望这会有所帮助