[Swift] Parseでデータを読み込む
Swift で Parse!
今回は、Swiftを使って、Parseサーバからデータを取得・表示するところまでやってみましょう。
以下、順を追ってやり方を説明していきます。
Parseサーバ上にデータを追加
ここでは、
- すでにParseサイトでのサインアップが完了していること
- アプリの登録が完了していること
-
を前提に話を進めます。
Parseサイトのデータ管理画面(Core)に移動し、必要なデータを入力します。
今回は画像を表示したいので、画像を格納する graphicFile カラム(File)を追加しました。
また、画像の説明文を格納する title カラム(String)も追加しています。
Parse iOS SDKを導入
CocoaPodsで"Parse"を導入しましょう。
参考:Parseのpodは 一番公式っぽい “Parse” を使おう
Storyboard
今回はデータ一覧を効率的に表示するため、TableViewControllerを使います。
Swiftでコードを書く
中身を見て行きましょう
AppDelegate.swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { var Id = "xxxxxxxxxxxxxxxxx" var Key = "xxxxxxxxxxxxxxxxx" // MARK: - Parse Parse.setApplicationId(Id, clientKey: Key) PFUser.enableAutomaticUser() var defaultACL = PFACL() PFACL.setDefaultACL(defaultACL, withAccessForCurrentUser: true) return true }
application:didFinishLaunchingWithOptions:で、Parseサイトで設定したApplication IDと、Client Keyを設定します。
TableViewController.swift
loadData()
func loadData(callback:([PFObject]!, NSError!) -> ()) { var query: PFQuery = PFQuery(className: "Picture") query.orderByAscending("createdAt") query.findObjectsInBackgroundWithBlock { (objects: [AnyObject]!, error: NSError!) -> Void in if (error != nil){ // エラー処理 } callback(objects as [PFObject], error) } }
Parseのサーバからデータを取ってくるところから実装します。
コールバックで、PFObjectの入った配列を返しています。
viewDidLoad()
override func viewDidLoad() { super.viewDidLoad() self.loadData { (pictures, error) -> () in self.pictures = pictures self.tableView.reloadData() } }
あらかじめ定義しておいたself.pictures(PFObjectの入った配列として定義)の中に、loadData()で取得した内容を代入しています。
その後、変更が画面に反映されるよう、reloadData()を呼んでいます。
UITableViewDataSourceのプロパティ
override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.pictures.count } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier(reuseIdentifier, forIndexPath: indexPath) as UITableViewCell var imageFile: PFFile? = self.pictures[indexPath.row].objectForKey("graphicFile") as PFFile? imageFile?.getDataInBackgroundWithBlock({ (imageData, error) -> Void in if(error == nil) { cell.imageView.image = UIImage(data: imageData)! cell.textLabel.text = self.pictures[indexPath.row].objectForKey("title") as? String } }) return cell }
ここでのポイントは、画像読み込みでPFFileオブジェクトを作成し、getDataInBackgroundWithBlock(block: PFDataResultBlock!)で実際に画像データを取得し、表示処理をしているところです。
完成
実行してみましょう。
Parseサーバに保存した3件のデータがすべてTableView上に表示されています。
お疲れ様でした!