如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?
Parse 是一个移动应用开发平台,旗下有个很有意思的产品:Parse Core。它的特色之一是允许应用开发者直接将数据存储在云端,而无需担心设置服务器或重新设计一个 REST API。Parse Core 是本地备份(比如核心数据),这使得它能轻松解决线上线下等后端问题。
本篇教程主要介绍如何创建一个基于 Parse 的应用。我们将打造一个类似 Instagram 的应用,它包括以下特征:
这款应用将完全使用 Swift 语言开发,Swift 是苹果最新的编程语言,用于打造 iOS 应用。Parse 并不用完全重写 Swift,所以我们需要创建一个桥接头来处理它俩的兼容性。 通过这篇文章你将学到以下技能:
那开始吧!首先,你得有一个 Parse 帐户。这可以通过你的 Facebook、Google+、GitHub 帐号或邮件在 Parse.com 注册。 通过点击「创建新应用」 按钮,创建一个新的应用程序,输入「Paws」作为应用名。接着,打开新应用,确保你能看到下图的的核心选项卡。
创建数据存储区从技术上说,Parse 只是在线数据库。数据被存储为具有一个名称和多个字段的对象,如电子表格。这样的对象被称为一个类,它的功能是数据结构的蓝图。我们将要使用的类名为 Cat。 在核心选项卡单击该按钮添加一个类。在下拉框中选择自定义,然后键入类的名称:Cat。然后,单击创建类。
这样,我们就创建了新的类,接着我们还可以添加一系列的标准字段,如 ObjectId、createdAt、updatedat和ACL。 将
这些字段将为 Cat 数据库提供基本信息。 导入数据现在我们已经设置好基础结构,可以导入数据了!将该文件保存到:cat.json。
至此,我们在 Parse 中的全部工作已经完成。下面开始构建 Swift Xcode 程序。 构建 Xcode打开 Xcode 并创建一个新项目,从开始界面选择「菜单→新建→工程」。
单击「下一步」 ,选择工程目录文件夹,再单击「创建」 。 我们不打算使用 Storyboards,所以单击左上的 Paws、2 targets、 iOS SDK,打开工程设置。在左侧的列表中单击 Target 下方的 Paws,然后找到屏幕中主区域的主界面设置。将 textMain 从框中移除。
用 Cocoapods 将 Parse 库添加到 Xcode 项目在程序代码中使用 Parse 之前,我们必须将其添加依赖关系。因此我们选择 Cocoapods,它是一个软件包管理器。许多应用项目依赖于第三方库,比如 Parse。CocoaPods 是方便加载库的工具,并确保其实时更新。 $ sudo gem install cocoapods 中途如果一两分钟没有进展也无需担心,那是因为 Cocoapods 正在安装中。安装完成后你可以看到一堆线条,最终...安装完成。
接下来,在 Xcode 项目的根目录下创建一个空文件,并调用 Podfile 文件。用你喜欢的文本编辑器打开,并粘贴下面代码到该文件: pod ‘Parse’,‘~> 1.7.1′ pod ‘ParseUI’,‘~> 1.1.3′ Podfile 会告知 Cocoapods 哪些库是我们需要的。这样的话,Parse 的版本是1.7.1,而ParseUI版本是1.1.3。 接下来,在命令行输入以下代码: $ pod install CocoaPods 会查找 Podfile,并尝试安装我们设置的依赖关系。这个步骤大概会花上几分钟。结果应该是这样:
CocoaPods 已经下载并编译 Parse,并把它添加到一个新的工作区。从现在开始,我们不再使用原来的应用项目,而会使用 CocoaPods 创建的工作区。它包含了我们的原始项目和 CocoaPods 项目。 这里要注意的是:通过搜索浏览找到程序的根目录,打开 Xcode 中的新工作区,再打开其中的 Paws.xcworkspace。验证下左侧的导航项目,会看到:Pods 和 Paws。 在我们直接编写应用前,需要建立 Parse 和项目之间的连接。Parse 是用 Objective-C 搭建的,而我们的项目则是用 Swift 语言,两者之间需要适当的设置才能兼容。 在 Swift 项目中使用 Objective-C任何 Objective-C 库、项目或类都可以通过设置桥接头才能与 Swift 兼容。从技术上讲,这样的桥接将 Objective-C 的头文件转换成 Swift 语言。 创建一个桥接头需要执行以下操作: 1.在 Paws 目录添加一个新文件,选择 Paws 工程下的 Paws 目录,单击右键,然后单击「新建文件」。
Xcode 创建两个新文件:Paws.m 和 Paws-Bridging-Header.h。Paws.m 文件没什么用,你可以直接将它删除。在 Paws-Bridging-Header.h 文件中写入以下代码: #import <Parse/Parse.h> #import <ParseUI/ParseUI.h> #import <Bolts/Bolts.h> 看到这里,你不禁会问难道这一大堆工作只是为了建立一个编程项目么?别担心,我们接下来就来搞点有趣的。请记住:Parse 提供一个现成的在线后端,能节省大量时间! 验证 Parse 是如何工作的通过 https://parse.com/apps,返回 Parse 的 Dashboard。将鼠标悬停在你帐户名的右上角,单击帐户,再单击应用键标签最上面一栏。你还可以直接访问 https://parse.com/account/keys。 func application(application: UIApplication,didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { Parse.setApplicationId("...",clientKey: "...") return true } 用 Parse 的应用键分别替换「...」
之后,尝试运行应用程序: 1.确保选择正确的设备,通过确认 项目在构造、运行过程中没有错误。一旦运行,你可以看到 iPhone 会出现有一个黑色的窗口,但窗口上却什么都没有——这是因为我们移除了主页面脚本,还没有替换。 创建表视图控制器为了显示出 Paws 应用中的 Cat 图片,我们需要使用一个表视图控制器。这是非常常见的 iOS 接口元件,能在垂直列表中展示各行数据。显而易见的例子就是 iPhone 上的联系人应用中人和号码的垂直列表。在 Objective-C 和 Swift 中,一个表视图控制器本身就是 UITableViewController 类。 注:陌生的术语类?把它当作原型,也就是你在铁铸件时用的模具。你把铁倒入模具,就出来一个副本。这种复制被称作该类的一个实例。 Parse 有个很棒的对应叫 ParseUI,是 UI 元素集合,能与 Parse 产品紧密结合。我们即将使用 PFQueryTableViewController 类。它用 Parse 数据扩展 UITableViewController 类的功能。这简直是完美的结合。
保存文件到 Paws 目录。选择目录时,请确保 Paws 作为目标被选中。 打开新类文件,可以看到的基本结构:一个名为 viewDidLoad;另一个名为 didReceiveMemoryWarning。需要注意的是,CatsTableViewController 扩展 PFQueryTableViewController,是它的子类。反过来,PFQueryTableViewController 类是 UITableViewController 的扩展,所以我们的表视图控制器将继承所有表视图功能,同时可用 ParseUI 添加代码和功能。 编码表视图控制器首先,我们必须重写类的构造方法来配置基础设置。 将以下两种方法添加到类的顶部,在文件的第一个大括号之后: override init(style: UITableViewStyle,className: String!) { super.init(style: style,className: className) self.pullToRefreshEnabled = true self.paginationEnabled = false self.objectsPerPage = 25 self.parseClassName = className } required init(coder aDecoder:NSCoder) { fatalError("NSCoding not supported") } 你刚添加了两个方法:
在最初的初始化中,完成了下列事项: 1.当 super.init()调用时,初始化父类 PFQueryTableViewController,从而完成自身初始化。 用 queryForTable 编码数据检索通过 PFQueryTableViewController 实现 Parse 表视图的核心是方法 queryForTable。我们继承该方法时,继承的实际上是 PFQueryTableViewController,所以需要对其进行重写:需要连接表视图控制器到 Parse 数据存储区时,PFQueryTableViewController 会调用它。它从表中查询数据,因此该方法名为 queryForTable。在该方法中,我们可以自定义检索。 override func queryForTable() -> PFQuery { var query:PFQuery = PFQuery(className:self.parseClassName!) if(objects?.count == 0) { query.cachePolicy = PFCachePolicy.CacheThenNetwork } query.orderByAscending("name") return query } 来看看这个新方法: override func queryForTable() -> PFQuery 其中包含了什么?编写新方法 queryForTable,告知编译器以下事项: 1.用相同的名字覆盖父类方法(识别标志),使用语句覆盖。 在方法内发生了下列变化: 1.声明一个新变量调用查询,需要一个命名参数的类名,用于实例化构造函数的方法,被分配的 self.parseclassname 值。换句话说,表的类名是 Cat,利用 Cat 实例创建查询。 最后,返回查询结果。(未完待续...)
敬请持续关注:《如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用》系列(2)(3).
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |