-1

我在学习积木时被卡住了。

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

它在块中看起来一切都很好——我能够写信给它。但是当返回它时,它显示错误:使用未声明的标识符'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;
}
4

2 回答 2

1

您的语法略有错误。您错过了对 的调用中的右括号-performRequestWithHandler:

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

- (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;
}

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

于 2013-01-18T06:02:45.370 回答
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];
    }

它应该是:

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

你错过了关闭区块。

于 2013-01-18T05:59:13.550 回答