gpt4 book ai didi

ios - __block 变量返回 null。如何访问 __block 变量中的 NSString?

转载 作者:行者123 更新时间:2023-12-01 18:07:43 52 4
gpt4 key购买 nike

我正在使用这个 findAllMessages() 函数来返回一个 NSString ,其中包含有关每条消息的信息。
一切顺利,直到我走出 block 并且 concatenatedMessage 字符串为空。

最后三行 concatenatedMessage 返回 null:

 NSLog(@"%@",concatenatedMessage);
NSString *newString = concatenatedMessage;
return newString;

如何在 block 外访问 concatenatedMessage 的值,以使 concatenatedMessage 不为空?
+(NSString *) findAllMessages{

__block NSMutableArray *totalMessages = [[NSMutableArray alloc] init];
__block NSDictionary *values;
__block NSString *concatenatedMessage;

FIRUser *current_user = [[FIRAuth auth] currentUser];
FIRDatabaseReference *dbReference = [[[[FIRDatabase database] reference] child:@"Messages"] child:current_user.uid];
FIRDatabaseQuery *allMessages = [dbReference queryOrderedByChild:current_user.uid];

[allMessages observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot *snapshot) {
NSMutableDictionary *eachMessage = snapshot.value;
concatenatedMessage = @"";
for(id key in eachMessage){
[totalMessages addObject:key];
values = [eachMessage objectForKey:key];
for(id key2 in values){
concatenatedMessage = [concatenatedMessage stringByAppendingString:[values objectForKey:key2]];
concatenatedMessage = [concatenatedMessage stringByAppendingString:@"^^"];
}
concatenatedMessage = [concatenatedMessage stringByAppendingString:@"%%"];
}
}];

NSLog(@"%@",concatenatedMessage);
NSString *newString = concatenatedMessage;
return newString;
}

谢谢!!

最佳答案

您正在尝试使用同步函数 ( observeEventType:withBlock: ) 包装异步函数 ( findAllMessages )。

这只是行不通。这似乎是每一种现代语言中的一个问题。

您可以:

  • FIRDatabaseQuery 上查找同步方法并调用它(不要从主线程执行此操作,否则会阻塞 UI)
  • 更改findAllMessages异步(findAllMessagesWithBlock:)并通过 block 返回给调用者。您可能还需要将调用者修改为异步。异步有一种方法可以接管大部分使用它的代码库。
  • 关于ios - __block 变量返回 null。如何访问 __block 变量中的 NSString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37870461/

    52 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com