-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 に答える