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
, 파일 위치가 후 변경되지 않습니다 읽으십시오. 즉, 실제로 읽은 것이 없습니다!
이제 해당 파일의 fileSize를 확인했습니다. 시뮬레이터에서 283.020 (올바른 크기)을 얻을 수 있지만, 디바이스에서는 크기가 220.024에 불과합니다. 내가 끝까지 filepos를 설정했기 때문에 독서가 없습니다. 내 장치에서 App을 삭제하고 다시 설치했습니다. 같은 결과, 같은 나쁜 파일 크기. Xcode에서 파일 참조를 삭제하고 다시 추가했습니다. 같은 결과! 왜 장치에서는 파일 크기가 잘못되었지만 시뮬레이터에서는 잘못되었습니다. 어떤 생각? – thpitsch