我是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];
}];
}