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