【发布时间】:2015-02-08 09:48:27
【问题描述】:
我有一个使用 parse query 获取成员列表的函数。我有一个 NSMutableArray 类型的属性,它应该存储名为 subscribers 的列表结果。我有两个代码块。一个块获取日期,一旦我有了日期,我就会调用另一个函数,该函数进一步调用解析云方法。这是代码
-(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 中的日志不会打印任何内容,但方法中的 one 会给出名称列表。我想将列表存储在数组中并将其放入 tableview 中。我在这里错过了什么?
【问题讨论】:
-
这就是异步进程的本质。如果您对此感到困惑,请尝试避免阻塞。你的代码可能会变得更长,但最终更容易理解,尤其是当你的代码块变得和你的一样大时。
标签: ios objective-c parse-platform objective-c-blocks