2010-02-06 5 views
1

프로그램로드시 생성되는 NSMutableArray가 있습니다. 프로그램이 종료되면 배열을 파일에 저장합니다. 그런 다음 앱이 다시 시작되면이 파일이 존재하는지 확인하고, 그렇다면 배열로 읽습니다.NSMutableArray 파일에서 읽은 후 문자열이 변경됩니다.

문제는 처음 생성 할 때마다 문제가 발생합니다. 특정 문자열에 대해 배열 객체를 검사하고 동일하면 무엇인가하십시오. 이것은 처음에는 잘 작동합니다. 그러나 배열을 벌금형에서 읽어 들인 다음 동일성을 비교하면 둘 다 동일하다고 말하지만 그렇게 생각하지 않고 프로세스를 건너 뜁니다. 코드 예제 :

파일이 존재 처음부터 작성하지 않는 경우는 다음과 같습니다

NSMutableArray *tmpArray=[[NSMutableArray alloc] initWithObjects: 
          @"1000", 
          @"1000", 
          @"1000", 
          @"500", 
          @"500", 
          @"500", 
          @"250", 
          @"250", 
          @"250", 
          @"100", 
          @"100", 
          @"100", 
          @"100", 
          @"TRIPLE", 
          @"TRIPLE", 
          @"DOUBLE", 
          @"DOUBLE", 
          @"- 500", 
          @"- 250", 
          @" - 250", 
          @"- 100", 
          @"- 100", 
          @"HALF", 
          @"BUST", 
          nil]; 

파일이 존재하는 경우 :

다음 비교할 경우

다음
pnames = [[NSMutableArray alloc] initWithContentsOfFile:myPath]; 

가 들어 오면

NSString *strInfo; 

strInfo = [pnames objectAtIndex: theInteger - 1]; 
NSLog(@"strInfo: %@", strInfo); 
if (strInfo == @"DOUBLE") 
{ 
    //do something 
} 

내가 말했듯이,이 비교는 첫 번째 생성시에는 잘 작동하지만 배열이 파일을 통해로드되는 경우에는 그렇지 않습니다. 파일을 작성

을 통해 이루어집니다 : 나는 (위)에 strInfo에서 디버거에서 볼 때, 그것은으로 표시

(void)applicationWillTerminate:(UIApplication *)application { 
[pnames writeToFile:[self saveFilePath] atomically:YES]; 

} 

:

NSCFString - 0c8168 - DOUBLE ---에서 0x3d42af0이 - - 파일은 부하를 통해, 동일한 것으로 인식되지 않는 경우가 DOUBLE ---

여기에 대한 통찰력 g이다 생성하고,이 동등한

NSCFString 인식 않는다 정말 감사합니다. 당신은 ==를 사용하여는 NSString 인스턴스를 비교할 수 없습니다

답변

5
if (strInfo == @"DOUBLE") 
{ 
    //do something 
} 

지오 ..., 당신은 -isEqualToString:를 사용해야합니다.

if ([strInfo isEqualToString: @"DOUBLE"]) { ... } 

문자열 값의 모든 앱 상수 문자열과, 따라서, 배열에있는 @ "DOUBLE는"너무 될 일이 컴파일되어 있기 때문에 먼저 창조 작업을하는 일

비교의 @ "DOUBLE"와 같은 주소에.

"디스크"에서 배열을 읽을 때 새 문자열이 할당됩니다.

+0

이런, 내가 그걸 알아야 했어. 좋은 답변 +1 –

+0

그것은 첫 번째 하중에 근무 미묘한 잡았다 (지금 설명). 천만에요! – bbum

0

방금 ​​NSString을 NSUserDefaults에 저장했는지 쉽게 궁금해 할 것입니다. NSUserDefaults에 가변 문자열을 저장할 때, 그 문자열을 검색 할 때 변경할 수 없다는 것을 명심하십시오.

정확한 문제를 잘 모르겠지만 일이 더 쉬워 질 수 있습니다.

관련 문제