0

我已经在 iPod、iPad 和 iPhone 的模拟器 4.3、5.0、5.1 和 6.0 上测试了我的应用程序。它按预期工作。但在我所有的设备上它都不起作用。

我知道在设备上文件名区分大小写。使用的常量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]);

为例程提供一个索引(无符号长整数),在本例中为 index=62825。程序搜索到 index*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

正如您在设备上的输出中看到的那样,读取后文件位置没有改变,这意味着实际上没有读取!

4

1 回答 1

0

错误的文件大小引导我朝着正确的方向前进。删除 Build 目录后,程序现在正在模拟器和设备上运行。

于 2012-11-01T03:16:31.340 回答