2011-08-09 6 views
0

단일 NSString 객체를 할당하고 if-else 블록 내부에 텍스트를 할당하고자하는 상황이 있습니다. 나는이 같은 코드를 작성할 때 :NSString 초기화시 alloc과 init 구분하기

NSString *string = [NSString alloc]; 
if (firstCase) 
    [string initWithString:@"firstCase"]; 
else if(secondCase) 
    [string initWithString:@"secondCase"]; 
[self someFunction:string]; 

을 나는 someFunction의 내부 오류가 (내가 string를 사용하려고하면 NSInvalidArgumentException를 throw) 얻을.

당신이 둥지 ALLOC 및 초기화를 잊어 버리셨습니까 : 내 코드를 단계별로 할 때 내가 someFunction 입력하면 또한, 콘솔은 말한다 라인을 생산?

이것은 을 나타낸다.

NSMutableString을 사용하여 똑같은 작업을 시도한 결과 string = [[NSMutableString alloc] init]을 수행하고 각 if-else 블록의 문자열에 추가하면되지만 이전 방법으로 동일한 결과가 생성되지 않는 이유를 아는 사람이 있는지 궁금합니다.

답변

0

if 및 else if에 대한 요구 사항을 충족하지 못하는 경우로 실행 가능합니까 ?? 당신은 귀하의 케이스가 무엇인지를 두 번 확인하고 싶을 수도 있습니다. 또는 귀하의 문자열을 ""로 기본 설정하고 싶을 수도 있습니다. 그래서 http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html

+0

지금까지 내가 항상 입력 해요 : 편집 : 당신이 여기

NSString *string = [[NSString alloc] initWithString:@""]; if(case1) [string stringByAppendingString:@"desired string"]; elseif(case2) [string stringByAppendingString:@"other string"]; 

사과의는 NSString 클래스 참조에 대한 링크입니다 stringByAppendingString
를 사용하여 어떤 값으로 선언 한 후 다음 문자열을 추가 할 수 있습니다 if-else. 문자열을 @ ""로 초기화하면 if-else 블록에서 다시 변경할 수 없습니다. 또는이 일을 합법적입니까 : NSString * string = [NSString alloc] initWithString : @ ""]; if (case1) [string initWithString : @ "case1"] – Vince613

+0

@ Vince613 편집 내용을 살펴보십시오. 언제나 문자열에 추가 할 수 있습니다. 변수의 범위가 if와 else 사이에 있기 때문에 if 내부에 문자열을 선언하지 않습니다. 그러면 더 많은 문제가 발생할 것입니다. – Matt

+0

if-else 블록 내에서만 존재하는 변수의 범위에 대해 언급 한 내용은 내 문제가 정확히 무엇인지 생각합니다. 나는 아직 편집에서 당신의 솔루션을 시도하지 못했지만 그것이 효과가있는 것처럼 보입니다. 도와 주셔서 감사합니다! – Vince613

관련 문제