用于Parse后端(IOS)的单独API类

时间:2015-03-27 20:04:41

标签: ios objective-c iphone parse-platform

我是Parse和Ios开发的新手。

我开发了一个使用Parse作为后端的ios-app。

我现在有主要功能,但我有一个大问题。

我想为Parse的API处理创建一个单独的类。正如我现在设置的那样,我直接在我的视图控制器中使用我的解析代码,据我所知,这不是那么好的编码。

但问题是处理后台工作。假设我想从服务器执行GET,这可以在后台线程中完成,只需使用“findObjectsInBackgroundWithBlock”

问题是当我将此方法移动到单独的API类时。然后我的ViewController要求我的API类获取所有对象,API类将在完成后立即返回它。它也不会在后台运行,我不能将带有对象的NSMutableArray返回到viewController,直到完成提取。

我认为我可以通过使用[query findObjects:& error]在我的API类中同步解析数据,只要我弄清楚如何在API类中创建我的get-method以异步方式运行。

我尝试使用块创建我的API方法作为异步方法,但不会在单独的线程上在后台运行。 (我是新来阻止一个不要回避没有,如果这是正确的方法来创建一个方法,将在使用它时在一个单独的线程中运行)

这是我的API方法(类: APIClient

    + (void) GETAllShoppingGroups:(void (^)          (NSMutableArray*))completionBlock{    

    //Create a mutable array (nil)
    NSMutableArray *shoppingGroupsArray = nil;

    //Create query for class ShoppingGroupe
    PFQuery *query = [ShoppingGroupe query];    

    //Filter - find only the groups the current user is related to
    [query whereKey:@"members" equalTo:[PFUser currentUser]];

    //Sort Decending
    [query orderByDescending:@"createdAt"];

    //Tell Parse to also send the real member-objects and not only id
    [query includeKey:@"members"];

    //Send request of query to Parse with a "error-pointer"and fetch in a     temp-array
    NSError *error = nil;
    NSArray *tempArray = [NSArray arrayWithArray:[query findObjects:&error]];

    //Check for success
    if (!tempArray) {
    NSLog(@"%@", error);
    NSLog(@"ERROR: %@", [error userInfo][@"error"]);
    return completionBlock(shoppingGroupsArray);
    } else {
    //Seccess
    shoppingGroupsArray = tempArray.mutableCopy;
    completionBlock(shoppingGroupsArray);
    }
}

这是我的ViewController类(类: ShoppingGruopViewController

  - (void) getAllObjects{

   //Init array if nil
   if (!self.shoppingGroupeArray) {
   self.shoppingGroupeArray = [[NSMutableArray alloc]init];
   }

   //Remove old objects
   [self.shoppingGroupeArray removeAllObjects];

   //Get objects
   [APIClient GETAllShoppingGroups:^(NSMutableArray* completionBlock){
   if (completionBlock) {
   [self.shoppingGroupeArray addObjectsFromArray:completionBlock]; }

   [self.tableView reloadData];
   }];
} 

0 个答案:

没有答案