在我以前的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服务,第二部分》
相关推荐
本篇将围绕 HarmonyOS 第一课中的应用程序框架进行深入探讨,并解答相关的习题。 首先,我们来看一下判断题: 1. 一个应用只能有一个 UIAbility。这个说法是错误的。在 HarmonyOS 中,一个应用可以根据需要创建多个...
【Palm OS应用程序设计指南】是一本面向编程者,无论是新手还是专家的指南,旨在教授如何在Palm OS平台上创建应用程序。Palm OS的应用程序设计不仅涉及到编程技术,还涵盖了一个有效的开发环境的构建,这对于高效...
驱动程序提供的测量专用VI、函数、数据类型和分析集成可帮助您轻松创建应用程序,而优化的DMA数据传输和单点I/O则可让您快速进行...
通过上述技术和方法,Web OS可以创建出一个集成了多种应用和服务的生态系统,为用户提供一种全新的、无缝的在线体验。在云计算和移动互联网时代,Web OS正逐步改变我们对操作系统和计算的理解。
### Harmony OS应用开发者高级认证知识点解析 [练习题+答案]Harmony OS应用开发者高级认证
《SylixOS应用开发手册1》是一本专为程序员准备的指南,详细介绍了SylixOS实时嵌入式操作系统的程序设计接口。SylixOS是一款在航空航天、工业自动化、通信、新能源等多个领域广泛应用的先进实时操作系统,它提供了...
它们和运行在Safari内部的web应用程序不同,在基于iPhoneOS的设备上,它们作为独立的执行程序来运行。本地应用程序可以访问iPhone和iPodTouch的所有特性,比如加速计、位置服务、和多点触摸接口,正是这些特性使设备...
SylixOS是一款先进的实时嵌入式操作系统,广泛应用于多个领域,包括航空航天、工业自动化、通信以及新能源等。它提供了丰富的中间件,方便软件工程师进行开发和维护。SylixOS不仅支持标准的POSIX API函数,还兼容...
- **核心要点**:iPhone SDK提供了必要的工具和资源,用于创建运行在iPhone本地的应用程序,与Web应用程序不同,本地应用程序作为独立的执行程序运行,具有更深入的设备特性和功能访问权限。 - **特性访问**:本地...
3. **应用程序框架**:WebOS可能包含一个或多个框架,用于简化开发和集成Web应用程序。这些框架可能提供了API和工具,使得开发者可以更容易地创建和管理WebOS中的应用。 4. **数据存储**:由于WebOS运行在浏览器...
通过对“Palm Web OS编程2 中文版”第二章内容的学习,我们不仅了解了如何创建Web OS应用程序的基础知识,而且还深入学习了应用程序的目录结构、重要配置文件的设置方法以及运行和调试的流程。这对于希望从事Web OS...
1. 表现层:这是用户与应用交互的部分,通常由Web前端或客户端应用程序组成。用户可以通过这个界面触发对RouterOS的操作请求。 2. 业务逻辑层:这一层接收来自表现层的请求,然后通过调用Web服务接口与RouterOS进行...
例如,你可以使用C#创建一个Web API服务,然后通过JavaScript在webOS应用中调用。 5. **项目结构**:压缩包中的"LOS.sln"和"LOS.suo"是Visual Studio的解决方案和用户选项文件,这表明可能有一个使用C#编写的项目与...
《Safari 和 WebKit 开发针对 iPhone OS 3.0》是一本专注于利用 iPhone 内置浏览器 Safari 及其底层的 WebKit 框架进行 Web 应用开发的专业书籍。随着 iPhone 和 iPod touch 的流行,基于 Web 的应用开发成为了一个...
Firefox OS Boilerplate App 应用了 Firefox OS 的 Gaia 风格,但请注意,没有义务为您的应用程序添加相同的外观和感觉:Firefox OS 应用程序是 Web 应用程序,因此无需遵循 UI 指南。 有关构建开放式 Web 应用...
《Symbian OS 软件开发——应用C++开发智能手机应用程序入门》是针对Symbian操作系统进行软件开发的一本专业教程,旨在帮助开发者利用C++语言构建智能手机应用程序。Symbian OS曾是全球最广泛使用的智能手机操作系统...
7. **系统服务和注册表**:Symbian OS的系统服务模型和注册表是管理应用程序配置和状态的关键。示例程序可能包含如何使用RProcess和RRegistry来与这些系统组件交互的例子。 8. **错误处理**:Symbian OS的错误处理...
3. **创建第一个Firefox OS应用** - 创建一个基本的HTML文件作为应用入口,设置合适的`manifest.webapp`文件来定义应用信息和权限。 - 使用JavaScript和Web APIs来实现应用功能,例如通过`navigator.geolocation`...
9. **可扩展性**:设计一个开放的架构,允许第三方开发者轻松创建和集成新的应用程序,是Web OS成功的关键。 10. **持久化存储**:用户的数据和设置需要在不同会话间保持,这可能涉及使用Web Storage(如...