Xcode - 文件读取时模拟器和设备之间的差异

时间:2012-10-31 04:36:13

标签: xcode4.5

我已经在适用于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。该程序寻找位置索引* 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

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

1 个答案:

答案 0 :(得分:0)

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