1

我创建了一个网站 (php),它连接到一个数据库,因此它可以拥有用户和发布材料。把它想象成一个论坛。现在我将如何制作一个连接到同一数据库的 iPhone 应用程序。我已经在自学 C++ 来制作应用程序,但不确定如何将它连接到数据库。

4

5 回答 5

2

做基于 Web 的数据库,最佳实践***是使用 HTTP 请求到 PHP 脚本。这样您就不必从应用程序建立数据库连接,从而将用户名和密码排除在实际项目之外。创建一些 PHP 脚本,通过发送 POST 和 GET 变量来满足您的需求。

***根据我的经验和偏好

于 2012-12-05T16:44:36.973 回答
1

You just setup a RESTful webservice, then access to it on Obj-C via Restkit.

EDIT: btw if you haven't got fancy app needs, just make your website responsive and you'l be done.

于 2012-12-05T17:34:36.473 回答
1

您需要为所有可能的操作构建 API 端点。

例如帖子/查看帖子/编辑帖子/添加

REST http://en.wikipedia.org/wiki/Representational_state_transfer是一种流行且有据可查的架构

如果您使用的是 PHP 框架,则通常有用于创建 API 的帮助库

本教程应该可以帮助您理解它 http://net.tutsplus.com/tutorials/php/creating-an-api-centric-web-application/

于 2012-12-05T16:46:08.260 回答
0

您的应用可以通过向服务器上的 URL 发出 HTTP 请求来连接到您的服务。你可以使用任何你喜欢的后端,我个人使用 PHP 和 MySQL,因为几乎所有的托管服务都支持这些工具。您通过定义执行功能的 URL 来形成查询。通常,您希望在更改服务器上的数据时使用 POST 请求,而在对信息进行只读请求时使用 GET 请求。

你必须小心设计你的 URL 和你的服务器以防止未经授权的访问,我不会在这里描述细节,但网络上有很多关于这方面的好建议。我将在这里重点介绍如何使用 URL 连接到您的服务。

我建议使用有助于发送请求和接收响应的库。回到(大约一年前)当我积极开发一个应用程序时,我使用了免费提供的 AsiHTTPRequest 库,但我现在看到作者已经停止支持它。我的 0.02 美元:它适用于我的应用程序:http ://allseeing-i.com/ASIHTTPRequest/

有两个部分:1)发送请求,2)接收和处理响应。您通常希望确保您的请求是异步发出的,这样您的应用程序不会在请求通过 Internet、服务器处理请求并且您收到响应时冻结。

为了方便解析结果,请让您的 Web 应用后端以 Apple plist 格式发送响应。或者您可以使用 XML,但我喜欢 plist,因为 SDK 中包含对它的支持。

这是我的应用程序中执行此操作的代码:

// this allows you to switch between the "live" web service and a local development copy
#ifndef _USE_LOCAL_SERVER_
#define kAppCustomerInfoURL @"https://mysite.com/path/to_my/service/"
#else
#define kAppCustomerInfoURL @"http://localhost/path/to_my/service/"
#endif

NSURL *url = [NSURL URLWithString:kAppCustomerInfoURL];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
// udm is my singleton that holds properties for the current user
[request setPostValue:[udm getProperty:kNameProperty] forKey:@"name"];
[request setPostValue:[udm getProperty:kPhoneProperty] forKey:@"phone"];
[request setPostValue:[udm getProperty:kEmailProperty] forKey:@"email"];
[request setPostValue:[udm getProperty:kCityProperty] forKey:@"city"];
[request setPostValue:[udm getProperty:kAddressProperty] forKey:@"address"];
[request setPostValue:[udm getProperty:kDeliveryNotesProperty] forKey:@"comments"];
[request setPostValue:[NSString stringWithFormat:@"%u", arc4random()] forKey:@"random"];

[request setValidatesSecureCertificate:NO];
[request setDelegate:self];
[request startAsynchronous];

您的对象需要实现 requestFinished: 和 requestFailed: 方法:

- (void)requestFinished:(ASIHTTPRequest *)request
{
    NSString *response = [request responseString];

    NSData* plistData = [response dataUsingEncoding:NSUTF8StringEncoding];
    NSPropertyListFormat format;
    NSString *errorStr;
    NSDictionary* plist = [NSPropertyListSerialization propertyListFromData:plistData 
                                                           mutabilityOption:NSPropertyListImmutable 
                                                                     format:&format 
                                                           errorDescription:&errorStr];
    if ( ! plist ) 
    {
        // NSLog( @"Error: %@", errorStr );
        [errorStr release];
        return;
    }

    for ( NSString *key in [plist allKeys] )
    {
         if ( [key isEqualToString:@"result"] )
         {
              NSString *resultStr = [plist objectForKey:@"result"];
              if ( ! [resultStr isEqualToString:@"ok"] )
              {
                   // set an error
              }
         }
        // more cases 
     }
}

这是我的响应失败方法,它设置了一些应用程序状态并发送请求已完成的通知,应用程序的其他部分可以在请求完成时使用它来更新自己:

- (void)requestFailed:(ASIHTTPRequest *)request
{
    NSError *error = [request error];
    NSLog( @"update customer info failed: %@", [error localizedDescription] );

    self.syncDataToServerOK = NO;

    [[NSNotificationCenter defaultCenter] postNotificationName:kUserDataSyncFinishedNotification object:nil];
}
于 2012-12-05T17:16:32.090 回答
0

我是 iphone 开发的新手,并且已经在 iPhone 上工作了一个月左右。想给一些提示:

1)首先阅读Objective-C,因为您正在制作Iphone应用程序以及Xcode的一般工作原理

2) 接下来连接到 Web API,您可以使用 AFNetworking。这是一个入门教程。您需要知道获取数据的 API 是什么。

3) 接下来,您需要根据 API 中的 JSON 或 XML 数据来解析数据。这将允许您获取数据。

4)您现在可以使用 UI 在 Xcode 中显示

于 2012-12-05T17:15:04.870 回答