如何在块内设置属性(Firebase)

时间:2017-05-22 18:02:48

标签: ios firebase firebase-realtime-database objective-c-blocks

我想在块中设置属性“users”,但在块函数之外,属性产生nil。

@property (strong, nonatomic) NSMutableArray *users;

- (void)configureData {

_ref = [[FIRDatabase database] reference];

FIRUser *user = [FIRAuth auth].currentUser;
NSString *currentUserID = user.uid;

_refHandle = [[[[_ref child:@"users"] queryOrderedByChild:[NSString stringWithFormat:@"appliedByUsers/%@", user.uid]] queryEqualToValue:@YES] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {

    _users = [[NSMutableArray alloc] init];

    for (FIRDataSnapshot *user in snapshot.children) {
        [_users addObject:user.key];
        NSLog(@"first object in userArray: %@", users[0]);
    }

}];

NSLog(@"first object in userArray outside block: %@", users[0]);

}

修改块内属性的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

_refHandle = [[[[_ref child:@"users"] queryOrderedByChild:[NSString stringWithFormat:@"appliedByUsers/%@", user.uid]]
   queryEqualToValue:@YES] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {

_users = [[NSMutableArray alloc] init];

for (FIRDataSnapshot *user in snapshot.children) {
    [_users addObject:user.key];
    NSLog(@"first object in userArray: %@", users[0]);
}

}];

此代码只为block参数设置了一个值。你知道代码块的执行时间吗?你发现用户[0] = nil,因为在执行日志代码之前,没有执行块代码。