0
我已經在模擬器4.3,5.0,5.1和6.0上爲iPhone,iPad和iPad測試了我的應用程序。它按預期工作。但是在我所有的設備上它都不起作用。Xcode - 模擬器與讀取文件的設備之間的區別
我知道在設備上的文件名區分大小寫。使用的常量DATA_FILE和類型都是小寫,打開後文件句柄不是零。 正如我所見,正確的文件定位後沒有實際的讀數。爲什麼不?
這是代碼,減少到最小以顯示問題。
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]);
一個索引(無符號長整數)被賦予例程,在這種情況下索引= 62825。該程序尋求定位索引* 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設置在最後,所以沒有讀數。我從我的設備中刪除了應用程序並重新安裝。相同的結果,相同的壞檔案。 我已經刪除了Xcode中的文件引用並再次添加。同樣的結果! 爲什麼我在設備上獲取錯誤的文件大小,但不在模擬器中?任何想法? – thpitsch