写入块iOS中的NSString

写入块iOS中的NSString,ios,objective-c,Ios,Objective C,我学积木时被绊倒了 我有一个函数返回一个NSString*myString。 在块中,我必须写入字符串,所以在定义它时,我在它前面添加了_块 它在街区里看起来很好——我能给它写信了。 但当返回它时,它会显示错误:使用未声明的标识符“myString” 我想这是因为没有人在挡块后强烈地指向我。对的 但是我能做些什么来修复它呢 - (NSString *)fetchString{ __block NSString *myString; SLRequest *aRequest = [

我学积木时被绊倒了

我有一个函数返回一个NSString*myString。 在块中,我必须写入字符串,所以在定义它时,我在它前面添加了_块

它在街区里看起来很好——我能给它写信了。 但当返回它时,它会显示错误:使用未声明的标识符“myString”

我想这是因为没有人在挡块后强烈地指向我。对的 但是我能做些什么来修复它呢

- (NSString *)fetchString{
    __block NSString *myString;
    SLRequest *aRequest =  [....];
    [aRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse   *urlResponse, NSError *error) {
    NSArray *myArray=[NSArray array];
    myArray= [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];
    myString = [myArray objectAtIndex:0];
    }];
    return myString;
}

问题在于这些线路:

[aRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse   *urlResponse, NSError *error) {
      NSArray *myArray=[NSArray array];
      myArray= [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];
      myString = [myArray objectAtIndex:0];
    }
应该是:

[aRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse   *urlResponse, NSError *error) {
      NSArray *myArray=[NSArray array];
      myArray= [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];
      myString = [myArray objectAtIndex:0];
    }];

您没有关闭块。

语法有点错误。您在调用
-performRequestWithHandler:
时错过了结束括号

(也没有必要将
myArray
初始化为
[NSArray array]
,因为您会立即将其设置为不同的值。)


您会发现此代码实际上不起作用,但这是一个问题。

正如@KurtRevis所提到的,请给我们一个代码示例。通过故事调试代码很难。@KurtRevis很抱歉,我添加了代码。@nembleton很抱歉,我添加了代码。@Joe:你为什么这么说?这是编译器警告吗?你能给我一张截图什么的吗?只是我打错了。我可以运行代码,就在返回之后,myString变成了未声明的标识符。你到底是什么意思?编译器是否仍然向您发出警告或错误,称为“未声明的标识符”?(我编译时没有看到任何警告或错误。)还是发生了其他事情?正如我在最后所说的,这段代码实际上不会按您希望的方式工作,如果您遵循链接,您将看到一个类似的答案,解释原因。
- (NSString *)fetchString{
    __block NSString *myString;
    SLRequest *aRequest = [....];
    [aRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
        NSArray *myArray = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];
        myString = [myArray objectAtIndex:0];
    }];
    return myString;
}