2013-01-18 2 views
-1

블록을 학습 할 때 나는 갇혔다.블록 iOS에서 NSString에 쓰기

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; 
} 
+3

코드를 표시하십시오. –

+0

@KurtRevis 언급했듯이, 우리에게 코드 샘플을주세요. 이야기를 통해 코드를 디버깅하는 것은 어렵습니다. – nembleton

+0

@KurtRevis 죄송합니다. 코드를 추가했습니다. – user1491987

답변

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

당신은 블록을 닫습니다 놓쳤다.

+0

여전히 동일한 문제가 있습니까? –

1

구문이 약간 잘못되었습니다. -performRequestWithHandler:로 전화를 걸어 닫는 괄호를 놓쳤습니다.

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

당신이 코드가 실제로 작동하지 않는 것을 발견 것이다 (도. 즉시 다른 값으로 설정하기 때문에 아무 소용이 [NSArray array]myArray를 초기화하지가), 그러나 그것은 separate question입니다 .

+0

그건 내가 잘못 입력 한거야. 코드를 실행할 수 있습니다. 반환 후 myString은 선언되지 않은 식별자가됩니다. – user1491987

+1

무슨 * 정확하게 * 당신을 의미합니까? 컴파일러가 여전히 "선언되지 않은 식별자"라는 경고 또는 오류를 제공합니까? (내가 컴파일했을 때 어떤 경고 나 오류도 보지 못했습니다.) 아니면 다른 일이 있습니까? 마지막에 말한 것처럼이 코드는 실제로 원하는 방식으로 작동하지 않으며 링크를 따라 가면 비슷한 이유를 설명하는 답변을 볼 수 있습니다. –

관련 문제