正在NSURLSession中捕获数据



假设我想在回调函数中访问一个名为key的变量,该变量来自NSURLSession之外(请参阅下面的代码(。问题是,当我进入会话时,key似乎被删除了。有没有一种方法可以捕获key变量(就像使用c++lambdas一样(,这样我就可以在会话中访问它?

bool FacadeIOS::uploadRequest(const std::string& key,
InterfaceCallbackHTTP* callback){
// ...setup the request

// key is not yet deleted, still had correct value
LOG("key before session: {}", key);
[[[NSURLSession sharedSession] dataTaskWithRequest:request
completionHandler:
^(NSData * _Nullable data,
NSURLResponse * _Nullable response,
NSError * _Nullable error) {
// key = ""
LOG("key after session: {}", key);
// Send to callback
if(callback != nullptr)
// The callback will be called with the wrong key value = ""
callback->didUploadFile(key);
}] resume];

您正在传递对字符串的引用。但是,您需要字符串比函数调用活得更长。所以你需要一个字符串的副本,而不是对它的引用。删除签名中的&

或者,您可以制作一个显式副本:

std::string key = key;  // Make a new copy that shadows the reference.

最新更新