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

问题描述 投票:0回答:3

抱歉,如果这是一个愚蠢的问题,但我对此很陌生。

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

假设 URL 是

http://myapp.com/api/people/fetchall
并且它返回 XML 数据。

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

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

资源:

以下是迄今为止我发现有用的一些链接:

ios objective-c web-applications
3个回答
3
投票

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

首先,Web 应用程序需要其 API 以客户端可以轻松解析的格式返回数据,无论它们是 iPhone 应用程序还是其他任何应用程序。因此,许多 Web 应用程序使用 JSON 或 XML。 HTML 不是传输数据的好格式,HTML 适合标记要呈现的文本。

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

要将数据从 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
类的文档和上述协议应该为您提供足够的信息来开始使用它们。

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


2
投票

看一下 Three20 项目 - Facebook iPhone 应用程序的开发者 Joe Hewitt 开源了他的许多工作,包括一个可以用网络数据填充自身的表视图类。


0
投票

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

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

的方法中完成
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

从 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 文件如下所示 #导入“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

希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.