2012-10-31 2 views
0

iPod, iPhone 및 iPad 용 시뮬레이터 4.3, 5.0, 5.1 및 6.0에서 내 응용 프로그램을 테스트했습니다. 예상대로 작동합니다. 그러나 모든 장치에서 작동하지 않습니다.Xcode - 파일 판독기에서 시뮬레이터와 장치 간의 차이점

나는 장치에서 파일 이름이 대소 문자를 구분한다는 것을 알고있다. 사용 된 상수 DATA_FILE과 유형은 모두 소문자이며 파일 핸들은 열린 후에 nil이 아닙니다. 알 수 있듯이 적절한 파일 위치 지정 후에 실제 읽기가 없습니다. 왜 안돼?

이 코드는 문제를 표시하기 위해 최소로 줄입니다.

NSLog(@"getData, index = %lu", index); 
NSFileHandle *fhIndex = [NSFileHandle fileHandleForReadingAtPath: [[NSBundle mainBundle] pathForResource: DATA_FILE ofType:@"idx"]]; 

u_char indexData[4]; 
NSLog(@"index*4 = %lu", (index * 4)); 
[fhIndex seekToFileOffset: (index * 4)]; 
unsigned long long test = [fhIndex offsetInFile]; 
NSLog(@"FilePos = %llu",test); 
[[fhIndex readDataOfLength: 4] getBytes: indexData length: 4]; 
test = [fhIndex offsetInFile]; 
NSLog(@"FilePos = %llu",test); 
NSLog(@"indexData = %i %i %i %i", indexData[0], indexData[1], indexData[2], indexData[3]); 

인덱스 (부호없는 long)가 루틴에 주어지며,이 경우 index = 62825입니다. 프로그램은 인덱스 * 4 위치를 찾은 다음 다음 4 바이트를 읽습니다. 장치에서이 4 바이트는 읽지 않습니다!

디버거 시뮬레이터의 출력 :

2012-10-31 10:46:24.557 program[469:12003] getData, index = 62825 
    2012-10-31 10:46:24.559 program[469:12003] index*4 = 251300 
    2012-10-31 10:46:24.559 program[469:12003] FilePos = 251300 
    2012-10-31 10:46:24.580 program[469:12003] FilePos = 251304 
    2012-10-31 10:46:24.581 program[469:12003] indexData = 0 73 130 174 

... 그리고 장치가 : 당신이 장치의 출력에서 ​​볼 수 있듯이

2012-10-31 10:41:57.776 program[2942:907] getData, index = 62825 
    2012-10-31 10:41:57.780 program[2942:907] index*4 = 251300 
    2012-10-31 10:41:57.782 program[2942:907] FilePos = 251300 
    2012-10-31 10:41:57.783 program[2942:907] FilePos = 251300 
    2012-10-31 10:41:57.784 program[2942:907] indexData = 248 10 18 0 

, 파일 위치가 후 변경되지 않습니다 읽으십시오. 즉, 실제로 읽은 것이 없습니다!

+0

이제 해당 파일의 fileSize를 확인했습니다. 시뮬레이터에서 283.020 (올바른 크기)을 얻을 수 있지만, 디바이스에서는 크기가 220.024에 불과합니다. 내가 끝까지 filepos를 설정했기 때문에 독서가 없습니다. 내 장치에서 App을 삭제하고 다시 설치했습니다. 같은 결과, 같은 나쁜 파일 크기. Xcode에서 파일 참조를 삭제하고 다시 추가했습니다. 같은 결과! 왜 장치에서는 파일 크기가 잘못되었지만 시뮬레이터에서는 잘못되었습니다. 어떤 생각? – thpitsch

답변

0

파일 크기가 잘못되어 올바른 방향으로 안내해줍니다. Build 디렉터리를 삭제 한 후 프로그램이 이제 시뮬레이터 및 장치에서 작동합니다.

관련 문제