2015-02-08 80 views
0

我有一个使用解析查询获取成员列表的函数。我有一个NSMutableArray类型的属性,它应该存储名为订户的列表结果。我有两个代码块。一个块获取日期,一旦我有日期,我会调用另一个函数,它进一步调用分析云方法。下面是代码目标C中的块/解析查询

-(void) fetchMemberList{ 

PFQuery *query=[PFQuery queryWithClassName:@"GroupMembers"]; 
[query fromLocalDatastore]; 
[query orderByAscending:@"updatedAt"]; 
[query whereKey:@"iosUserID" equalTo:[PFUser currentUser].objectId]; 
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
if(error) 
{ 

} 
else{ 

    if(objects.count==0) { 
     _latestTime=[PFUser currentUser].createdAt; 
    } 

    else { 
     PFObject *member=[objects objectAtIndex:0]; 
     _latestTime =member.createdAt; 
    } 

    [Data getMemberList:_latestTime successBlock:^(id object) { 

     NSMutableDictionary *members = (NSMutableDictionary *) object; 

     NSArray *appUser= [members objectForKey:@"app"]; 
     NSArray *phoneUser=[members objectForKey:@"sms"]; 
     if(appUser.count>0){ 
     for(PFObject * appUs in appUser) 
     { 
      appUs[@"iosUserID"]=[PFUser currentUser].objectId; 
      NSString *obj= [appUs objectForKey:@"name"]; 
      NSString *child= [appUs objectForKey:@"childern_names"]; 
      if(child.length>0) 
      { 
       [_subscriber addObject:child]; 
      } 
      else if(obj.length>0) 
      { 
       [_subscriber addObject:obj]; 

      } 


      } 
      [PFObject pinAllInBackground:appUser]; 

     } 

     if(phoneUser.count>0){ 
     for(PFObject * phoneUs in phoneUser) 
     { 
      phoneUs[@"iosUserID"]=[PFUser currentUser].objectId; 
      NSString *obj= [phoneUs objectForKey:@"subscriber"]; 
      NSString *child= [phoneUs objectForKey:@"number"]; 
      if(child.length>0) 
      { 
       [_subscriber addObject:child]; 
      } 
      else if(obj.length>0) 
      { 
       [_subscriber addObject:obj]; 

      } 

     } 
      [PFObject pinAllInBackground:phoneUser]; 

     } 


     NSLog(@"%@ subscriber in fetch method",_subscriber); 
    } errorBlock:^(NSError *error) { 

    }]; 


} 


}]; 


} 

在我viewDidLoad中功能: -

- (void)viewDidLoad { 
[super viewDidLoad]; 
_subscriber=[[NSMutableArray alloc]init]; 


[self fetchMemberList]; 
NSLog(@"%@ in viewdidLoad",_subscriber); 

}

所以在日志中viewDidLoad中不打印任何东西,但一个在方法给出名称列表。我想存储列表中的数组,并将其放入tableview中。我在这里错过了什么?

+0

这是异步过程的本质。如果你被搞砸了,那就尽量避免块。你的代码可能会变长,但最终会更好理解,特别是当你的块变得如此庞大时。 – 2015-02-08 10:01:14

回答

0

findObjectsInBackgroundWithBlock:块是异步的,所以_subscriber isn't immediately available to print after you call your fetchMemberList方法。这就是为什么块中的那个实际上给了你名字的列表 - 因为那时回调完成了。