既然已经介绍完了基本信息,是时候动手写代码了。我们这里主要会用到PFObjectPFUserPFACLPFRole这几个类。

1. 存储对象

要用Parse保存内容到云端都是通过PFObject来做到的。用特定的类名创建一个PFObject对象,以键值对形式(想想NSMutableDictionary)添加所需的数据,然后调用save方法。这里有个例子。

使用Parse创建对象并将其保存到云端

  1. PFObject *object = [PFObject objectWithClassName:@"UserProfile"];
  2. [object setValue:@"Mugunth" forKey:@"userName"];
  3. [object setValue:@"mugunthkumar" forKey:@"twitter"];
  4. [object setValue:@"imk.sg" forKey:@"skype"];
  5. [object setValue:@"blog.mugunthkumar.com" forKey:@"blog"];
  6.  
  7. [object saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
  8.  
  9. if(!succeeded) {
  10. NSLog(@"%@", error);
  11. }
  12. }];

只需做一些很小的改动就可以把同一个UserProfile对象和一个用户账户(PFUser)连接。这意味着只有登录用户才能读写对象。还有,通过访问控制类PFACL,Parse允许开发者对访问权限有完全的控制。现在来看看如何使用这两个类。

  1. [PFUser logInWithUsernameInBackground:@"mugunth" password:@"magic"
  2. block:^(PFUser *user, NSError *error) {
  3.  
  4. if(!user) {
  5. NSLog(@"%@", error);
  6. return;
  7. }
  8.  
  9. PFACL *acl = [PFACL ACLWithUser:user];
  10. PFObject *object = [PFObject objectWithClassName:@"UserProfile"];
  11. [object setACL:acl];
  12.  
  13. [object setValue:@"Mugunth" forKey:@"userName"];
  14. [object setValue:@"mugunthkumar" forKey:@"twitter"];
  15. [object setValue:@"imk.sg" forKey:@"skype"];
  16. [object setValue:@"blog.mugunthkumar.com" forKey:@"blog"];
  17.  
  18. [object saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
  19.  
  20. if(!succeeded) {
  21. NSLog(@"%@", error);
  22. }
  23. }];
  24. }];

除了开始的用户登录和后面创建访问控制列表对象之外,代码几乎是一样的。运行以上代码,应该能在数据浏览器中看到这些对象,如图25-2所示。

iOS中Parse代码实现

图25-2 数据浏览器显示对象

2. 获取对象

从云端获取对象非常简单,用PFQuery对象就能做到。

使用PFQuery从Parse获取对象

  1. PFQuery *query = [PFQuery queryWithClassName:@"UserProfile"];
  2. [query getFirstObjectInBackgroundWithBlock:^(PFObject *object, NSError
  3. *error) {
  4.  
  5. NSLog(@"%@", object);
  6. }];

执行上面的代码就会看到保存的用户信息对象。甚至可以在PFQuery对象上应用过滤器来过滤对象。

  1. [query whereKey:@"twitter" equalTo:@"mugunthkumar"];

3. 离线模式

Parse的强大之处在于能够离线工作并保存对象。当设备重新上线之后,Parse框架自动将变更同步到云端。

开发者只需用saveEventually代替saveInBackgroundWithBlock:

有了这些特性,最累的活也不过是把必须保存到云端的对象转换成一个PFObject对象。可以手动做这些事,即为所有的模型都写一个saveToParse方法。还有一个简洁且优雅的方法是利用Objective-C的运行时方法。MKFoundation库有一个运行时方法可以把对象转换成PFObject对象,就是利用了Objective-C强大的运行时方法。


MKFoundation是GitHub上的库,能让开发者把应用中的任何对象转换成PFObject对象。MKFoundation用Objective-C运行时方法来检查对象并创建PFObject。只需对PFObject做一些小小的改动(比如改变用户/身份),应用即刻就能具备Parse后端支持。

摘自:移动开发网

posted on 2013-08-04 23:43  FullIdea  阅读(797)  评论(0)    收藏  举报