创建您自己的i??OS应用程序的Web服务,第一部分
我们有一个名为iglobe localhost上有两个表:用户和标签的数据库。?用户表(?图B)包含主键与一个用户名,一个密码,密码提示,第一个和最后一个名称,以及电子邮件,电话号码,地址,且该等定期的东西。
图B
标签表(?图C)也有自己的主键(TAGID),相应的用户名,一个标识符,标签的经度和纬度,创建日期,它的价值,用户多少分。?还有一个国家的领域,这是实施后,随着项目的进展(它已经在2011年以来的作品)。
图C
我们的Web服务的想法是从这些表中读取和写入他们的任何数据用户请求或交他们。?这部分需要你知道的一些?PHP?。?让我们开始寻找什么样的代码来读取一个表看起来像。
<?phpinclude_once("JSON.php");$json = new Services_JSON();$link = mysql_pconnect("localhost", "user", "pass") or die("Could not connect");mysql_select_db("iglobe") or die("Could not select database");$arr = array();$rs = mysql_query("SELECT * FROM users");while($obj = mysql_fetch_object($rs)) {$arr[] = $obj;}Echo $json->encode($arr);?>
首先,我们包括json.php的文件,以访问您的服务器上的JSON文件(请确保您的网络服务器或主机,为您提供至少PHP 5.2)。?然后,我们做一个连接到数据库,使用数据库的用户名和密码,以及数据库主机。?现在,我们创建一个数组对象,所以一旦我们执行的mysql_query从用户表中的所有条目被收集到$ RS,我们可以把该对象到我们到达[]对象。?最后,我们到$ json的编码$ ARR和回声它搬上了银幕。
一旦这个代码,并准备连同你的数据库(包括一些记录),您的浏览器可以直接到该文件(我把它叫做myserver.com / getusers.php的)。?我得到了以下的结果:
[{"id":"35","username":"zlitsami ","password":"932d1c42a4e4880e57037994fd3584b1","password_hint":"","lastname":"","firstname":"","email":"joe@iglobe.com","phone":"","address1":"","address2":"","city":"","state":"","zip":"","country":"","url":"","permissions":"1","udid":"9","userCreated":"2013-01-01 14:27:22","time_queued":null,"time_sent":null}, {another}, {another}]
这是一个有很多元素的数组。?每个元素是用户的表项。?每个条目是一个键值对的字典。?眼熟吗?
现在我们知道了如何从我们的数据库中读取信息,让创建的代码写入到数据库。
<?php$con = mysql_connect("localhost","user","pass");if (!$con) { die('Could not connect: ' . mysql_error()); }mysql_select_db("iglobe", $con);$sql="INSERT INTO tags (username, latitude, longitude, country,destintyudid,points) VALUES ('$_POST[sender]','$_POST[latitude]','$_POST[longitude]','$_POST[country]','$_POST[receiver]','$_POST[points]')";if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); }echo "1 record added to tags";mysql_close($con)?>
我们再次连接到我们的数据库,我们创建了一个SQL语句插入值(这些值来自于一种形式,是在网上或移动设备上的)。?我们执行该SQL语句与我们联系,并验证用户呼应的结果。?我打电话给此文件writephp.php的。
之前,我们移动到iOS上,让的网上测试我们的服务。?创建一个HTML文件称为Writeform.html,这段代码保存:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head></head><body><form action="writephp.php" method="post"> <table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="2"> <tbody> <tr> <td>Name:</td> <td><input name="sender" type="text"></td> <td></td> </tr> <tr> <td>UDID(unnecessary):</td> <td><input name="udid" type="text"></td> <td></td> </tr> <tr> <td>Latitude:</td> <td><input name="latitude" type="text"></td> <td></td> </tr> <tr> <td>Longitude:</td> <td><input name="longitude" type="text"></td> <td></td> </tr> <tr> <td>Country</td> <td><input name="country" type="text"></td> <td></td> </tr> <tr> <td>Receiver</td> <td><input name="receiver" type="text"></td> <td></td> </tr> <tr> <td></td> <td></td> <td><input type="submit"></td> </tr> </tbody> </table> <br></form></body></html>
现在,您的网页浏览器上加载的形式和提交数据到你的数据库。
我不想让此Web服务太复杂了,因为我想保持你的注意力在iOS端,让我们创建一个表单,最终从我们的服务针对特定用户读取点。?创建另一个HTML文件称为Testform.html,这段代码保存:
<HTML><head><form action="readpoints.php" method="post">User: <input type="text" name="userNa"/><input type="submit" /></form></head></HTML>并创建PHP对口:
<?phpinclude_once("JSON.php");$json = new Services_JSON();$link = mysql_pconnect("localhost", "user", "pass") or die("Could not connect");mysql_select_db("iglobe") or die("Could not select database");$username = $_POST["userNa"];$result = mysql_query("SELECT username, SUM(points) AS PUNTOS FROM tags WHERE username='$username' GROUP BY username");// THIS RETURNS ARRAY NOT READ PROPERLY BY iOS JSON$resultado = array();while($obj = mysql_fetch_object($result)) {$resultado[] = $obj;}Echo $json->encode($resultado);?>
一旦我们得到更多的数据到数据库中,我们将使用此代码后的最后一位。
到目前为止,我们有一个资源,返回一个特定的用户,readpoints.php点,这是什么所谓的Web服务端点。?可以有很多的Web服务端点。?我们可能要在游戏或应用程序,一旦得到了很多用户的点,以填补一个领导委员会,例如。?从发票数据库,而不是一个接一个,我们可能想获取很多交易。?因此,让我们自己和创建端点管理一组输入数据。?在我们的例子中,我们必须能够通过Web服务的一组用户。?我们的文件看起来像这样:
<?phpinclude_once("JSON.php");$json = new Services_JSON();//1. PROCESS RECEIVED ARRAY$handle = fopen("php://input", "rb");$http_raw_post_data = '';while (!feof($handle)) { $http_raw_post_data .= fread($handle, 8192);}fclose($handle);//1.1 Just decode to see what kind of object it is$post_data = json_decode($http_raw_post_data,true);if (is_array($post_data)) $response = array("status" => "ok", "code" => 0, "original request" => $post_data);else $response = array("status" => "error", "code" => -1, "original_request" => $post_data);//2. CALL DB QUERY$link = mysql_pconnect("localhost", "username", "password") or die("Could not connect");mysql_select_db("iglobe") or die("Could not select database");//3. CREATE FINAL ARRAY TO RETURN$arrayToReturn = array();//4. CYCLE THROUGH USERSforeach ($post_data as $value) { //CREATE QUERY $result = mysql_query("SELECT username, SUM(points) AS PUNTOS FROM tags WHERE username='$value' GROUP BY username"); //EXECUTE QUERY & ADD EACH USER/POINTS DICTIONARY TO $resultado ARRAY $resultado = array(); while($obj = mysql_fetch_object($result)){$arrayToReturn[] = $obj; }}Echo $json->encode($arrayToReturn);?>
这个基本的PHP代码,需要传递的,正如我们前面提到的数组,遍历数据库,为每个用户获得积分。?这是很重要的,因为我们的应用程序保存到Web服务器的数据库中有很多车次。
现在,我们要对我们的iOS故事板或前端工作。?然后,我们将硬编码数据,并获取从实际的后端网络,这样,我们就可以看到我们的前端将需要在数据模型,然后我们就可以获取网络数据并更换我们的数据,这些数据模型。?我们也将学习两种方式获取数据:直列,凌乱的代码和整洁的编码。
遵循以下步骤:
?
?
让我们回顾一下在本节中,我们将做什么:
?
?
这应该是现在你的第二天性,所以我会杀出通过具体。
这里的物业代码:
@property (nonatomic, strong) NSArray *testArray;Here's the viewDidLoad code:- (void)viewDidLoad{ [super viewDidLoad]; self.testArray = [[NSArray alloc] initWithObjects:@"me", @"you", @"them", nil]; NSLog(@"array %d", [self.testArray count]);}这里是返回数组数代码:
return [self.testArray count];这里是代码cFRAIP:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; // Configure the cell... cell.textLabel.text = [self.testArray objectAtIndex:indexPath.row]; return cell;}
在构建与运行,选择在故事板的UITableViewCell,在“属性”检查,确保你使用电池作为重用标识符。?你的应用程序应该正常工作。
如果构建与运行,用户应显示在tableview的。?爽!?这就是我们要想做的事 – 即,显示一个用户列表在tableview的,然后加点,像一个得分表。
图D是一个模型,我们的应用程序将是什么样子。?在本质上,我们将有一个标签栏控制器管理三个视图:用户,地图和说明。?我们还将抛出一个登录视图中的应用程序启动。?这应该给你一个什么样的任务,我们需要执行,为了做到这一点的想法。
a)现在登录视图控制器
b)除用户和传递信息
C)从Web服务获取用户数据
图四)地图上的点
E)显示在一个视图中的说明
图D
你应该能够重新创建在你的故事板。?这里的基本步骤是:
1。?选择您现有UsersViewController现场,从“编辑”菜单,选择“嵌入在标签栏控制器。?你应该有一个的场景和一类UsersViewController,和身份督察,现场应设置为它的类的类型。
2。?清除时添加嵌入式的tableview的现场在一个标签栏(出清晰,我的意思是确保它没有任何标签或其他控制)的第二个场景。?现在拖动一个UIMapView到。?添加一个UINavigationBar的顶部和两个按钮(情节和凹凸)对任何一方的。?创建它一个MapViewController类,将其类型设置。?添加的MKMapView IBOutlet属性和两个的UIBarButtonItem IBOutlet属性,并把它们连接起来。?添加MKMapViewDelegate。
3。?对于最后一个视图添加另一个UIViewController的,并把它拖动一个UIWebView和UINavigationBar。?创建它的类文件和它命名为InstructionsVC。?添加一个UIWebView的IBOutlet物业,并将其连接。?添加UIWebViewDelegate,不要忘记设置的场景类型。
4。?添加一个UIViewController,ModalViewController(?图E矿山看起来像什么),并创建IBOutlet属性-这是四个标签,静态文本(用户,垭口,电子邮件,和通行证需要…)。?有三个UITextFields带有占位符文本,以指导用户。?有三种不同的操作UIButtons。?人图标是一个按钮设置图像与背景图像,这将是“按钮,用户将使用到Web服务器上传自己的形象。
现在我们可以创建其他类文件的TagListController,标签/用户模式,以及注释/ PlacemarkVC。
图E
一两分钟的可视化应用程序的布局将类似于现在我们有一个更好的主意在哪里,我们要去,然后比较最初的草图,你让你的应用程序的可视化。
在第二部分,我们将连接到Web服务,并获取实际数据。《创建您自己的i??OS应用程序的Web服务,第二部分》