在我以前的TechRepublic的系列中,我们使用了现有的Web服务来创建iOS应用程序(“创建一个Web服务,零件 一个和 二 “)。在这个系列中,我们将创建Web服务后端iGlobe为不同的应用程序,这是一个游戏,我前一阵子。
基本上,我们希望用户能够标记一个地方或一个人,并获得该动作点。 (与多数点在比赛结束的竞争对手赢得了钱罐)为了做到这一点,应用程序进行交互,我们将创建一个Web服务。 我们的Web服务将需要能够:
- 存储每个玩家的用户名信息
- 接收用户的点
- 目前用户的点
在本教程中,我们将使用一个辅助类称为SantiappsHelper,其中包含的代码来运行这些连接到Web。 在这种情况下,通常被称为一个独立的类图书馆,需要照顾这些进程。 如果您只需要这样一个类(在我们的例子一样)的一个实例,您创建一个Singleton模式。 你只想要一个实例的连接,因为你不希望很多的连接类的实例创建,接收,并断开 – 这可能最终在多个连接到相同的资源在不同的时间,这可能混淆你或服务器。
这里是什么,我们将在本系列:
1。 创建Web数据库
2。 创建Web服务的后端
3。 创建iOS的前端(故事板)
4。 获取数据
- 了。 NSURLConnection的
- 二。 GCD和完成块
5。 添加 凹凸 API
6。 扔在社会
步骤1:创建Web数据库
Web服务通常都是大型的信息数据库,我们的数据库将需要一个表来存储我们上面提到的所有信息。 我们与数据库中的四个主要方法:创建,读取,更新,删除( CRUD )数据。 所以,让,简短迂回,谈谈数据库 – 特别是,它们的结构,以及我们如何与他们进行互动。
数据库
数据库是信息存储,它可以写成文件(如Word或PowerPoint)。 这些文件中的信息具有预定的结构,Word和PowerPoint知道如何读取和访问,以目前你想要什么,让您编辑它,再存放起来,问题是只有Word将阅读的docx文件,唯一的PowerPoint会读pptx文件。 数据库的巨大优势,他们将信息存储在一个非常紧凑的方式和许多不同的接口可以读取。 简单的数据库,多个接口可以读取它。
大多数网络托管服务通常是免费提供的,我们将使用一个数据库。 我的网站托管服务有phpMySQL,都包含免费包。 如果你想其他如MSSQL数据库,你需要一个有偿服务。 图A是我的数据库管理界面看起来像。
图A
我们有一个名为iglobe localhost上有两个表:用户和标签的数据库。 用户表( 图B)包含主键与一个用户名,一个密码,密码提示,第一个和最后一个名称,以及电子邮件,电话号码,地址,且该等定期的东西。
图B
标签表( 图C)也有自己的主键(TAGID),相应的用户名,一个标识符,标签的经度和纬度,创建日期,它的价值,用户多少分。 还有一个国家的领域,这是实施后,随着项目的进展(它已经在2011年以来的作品)。
图C
第2步:创建Web服务后端
我们的Web服务的想法是从这些表中读取和写入他们的任何数据用户请求或交他们。 这部分需要你知道的一些 PHP 。 让我们开始寻找什么样的代码来读取一个表看起来像。
<?php include_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对口:
<?php include_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服务的一组用户。 我们的文件看起来像这样:
<?php include_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 USERS foreach ($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服务器的数据库中有很多车次。
步骤3:创建的的iOS前端(故事板)
现在,我们要对我们的iOS故事板或前端工作。 然后,我们将硬编码数据,并获取从实际的后端网络,这样,我们就可以看到我们的前端将需要在数据模型,然后我们就可以获取网络数据并更换我们的数据,这些数据模型。 我们也将学习两种方式获取数据:直列,凌乱的代码和整洁的编码。
遵循以下步骤:
- 创建一个新的空项目使用故事板,ARC,iPhone,没有核心数据。
- 进入到情节提要,并拖动到网格的UITableViewController。
- 创建一个类UsersListViewController。 故事情节,选择现场,在Identity督察使我们的场景UsersListViewController类型从下拉列表中。
- 运行一个快速的测试,以确保我们的TVC工作。
- 构建与运行。 你应该得到一个空的tableview。
让我们回顾一下在本节中,我们将做什么:
- 一个数组属性添加到您的m文件
- 充液阵列在viewDidLoad
- 消除讨厌的警告线
- 让tableview的一节返回
- 让tableview的返回数组数
- 让tableview的细胞返回数组对象
这应该是现在你的第二天性,所以我会杀出通过具体。
这里的物业代码:
@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服务,并获取实际数据。《创建您自己的iOS应用程序的Web服务,第二部分》
相关推荐
驱动程序提供的测量专用VI、函数、数据类型和分析集成可帮助您轻松创建应用程序,而优化的DMA数据传输和单点I/O则可让您快速进行...
它们和运行在Safari内部的web应用程序不同,在基于iPhone OS的设备上,它们作为独立的执行程序来运行。本地应用程序可以访问iPhone和iPod Touch的所有特性,比如加速计、位置服务、和多点触摸接口,正是这些特性使...
它们和运行在Safari内部的web应用程序不同,在基于iPhoneOS的设备上,它们作为独立的执行程序来运行。本地应用程序可以访问iPhone和iPodTouch的所有特性,比如加速计、位置服务、和多点触摸接口,正是这些特性使设备...
Firefox OS Boilerplate App 应用了 Firefox OS 的 Gaia 风格,但请注意,没有义务为您的应用程序添加相同的外观和感觉:Firefox OS 应用程序是 Web 应用程序,因此无需遵循 UI 指南。 有关构建开放式 Web 应用...
国际化您的应用程序 32 性能和响应速度的调优 34 不要阻塞主线程 34 有效地使用内存 34 浮点数学运算的考虑 36 减少电力消耗 36 代码的优化 38 窗口和视图 39 什么是窗口和视图? 39 UIWindow的作用 39 UIView是作用...
学习在uC/OS-II系统中应用程序设计,了解任务和事件的创建,及任务的调度;同时了解uC/OS-II系统中设备文件与设备驱动程序的关系,以及系统读写调用与驱动程序读写函数的关系。
palm web os功能详解,带程序实例
此通用客户端允许您使用应用程序, 应用程序和应用程序访问Web服务。 使用此框架,您可以创建支持客户端协议的 , , 和应用程序。 该框架能够使用标准协议在远程Web服务上执行方法。SDK 1.x与SDK 2.x 我们正在发布...
全书共分4部分,每一部分的第一章描述一个教学示例程序,其后各章根据这个例子提出的问题展开讨论。 第1部分(第1~3章)简单介绍了Symbian OS。第2部分(第4~8章)解释了创建简单GUI(图形用户界面)应用程序所需...
Platypus, OS X 开发人员工具从脚本创建应用程序包 鸭嘴兽 费费费是一个开发人员工具,它从解释的脚本( 如 shell 脚本或者Perl和 python 程序) 创建原生Mac应用程序。 通过将脚本包装在一个应用程序包目录结构...
osTicket通过自己的基于web的安装程序帮助引导安装过程, 尽管安装程序提供了分步指导,但如果提前了解Web servers, PHP和MySQL的一般知识是很重要的和有帮助的.要安装osTicket,您的Web服务器必须是PHP 4.3(或更高...
Firefox-OS-Boilerplate-App, 创建 Firefox 操作系统应用程序 Firefox 操作系统样板应用这是一个用于 Firefox 操作系统的演示应用程序,它基于 fxosstub插件,旨在作为一个简单的模板,用于启动应用程序的应用程序。...
易受攻击的Web应用程序 什么是漏洞网络应用 Vulnerable-Web-Application是一个网站,面向对网络渗透感兴趣并且希望拥有有关此主题的信息或正在工作的人们。 实际上,该网站的安装和使用非常简单。 漏洞Web应用程序...
Vuido - 用Vue.js为Windows,OS X和Linux创建原生桌面应用程序
C 类库,用于创建RISC OS应用程序。 TBX旨在提供一个C 类库,以帮助在C 中的RISC OS编写应用程序
《Ruby.on.Rails.Web开发之旅》,作者:【德】Patrick Lenz,翻译:王德民、刘昕、裴立秋,出版社:人民邮电出版社,ISBN:9787115188526,PDF 格式,大小 144 Mb,被压缩为 3 部分,本资源是第一部分;第二部分下载...
《Symbian OS 软件开发——应用C++开发智能手机应用程序入门》教程所配源代码。
一个“简单”的入门项目,可以使用angular和nativescript使用单个共享代码库创建本机移动和Web应用程序。 它旨在插入后端。 前端基于项目。 检查此以供参考,该与该入门项目的架构完全相同。 先决条件 全局安装 ...
Firefox OS 本地化的开放网络应用程序模板。 笔记 要使用 Rakefile,你需要 ruby 和 bundler: gem install bundler 我建议在开发时交换manifest.appcache CACHE 和 NETWORK。 在构建和部署您的应用程序之前,...
为 Firefox OS 打包 Web 应用程序的模板。 目标 有大量编写良好的移动网络应用程序可以像 Firefox OS 应用程序一样出色地工作。 但是,拥有一个只加载移动网站的应用程序会带来一些问题。 用户可以离开您的域,从而...