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中。我在这里错过了什么?
这是异步过程的本质。如果你被搞砸了,那就尽量避免块。你的代码可能会变长,但最终会更好理解,特别是当你的块变得如此庞大时。 – 2015-02-08 10:01:14