我一直在研究这个问题一段时间,我有一个在 mac 上运行的应用程序,它的坐标数据存储在这样的结构中:
struct xyz {
float x;
float y;
float z;
};
struct xy {
float x;
float y;
};
struct object {
struct xyz *myXYZ;
struct xy *myXY;
};
这一切都按预期工作,然后我将结构添加到NSData
如下所示:
struct object anInitialTestStruct;
NSMutableData *myTestDataOut = [NSMutableData dataWithBytes:&anInitialTestStruct length:64 freeWhenDone:NO];
BOOL good = [myTestDataOut writeToFile:[NSString stringWithFormat:@"%@/filename.dat", docsDirectory] atomically:YES];
这按预期工作,我得到一个文件,看起来里面有数据(作为参考,我已经为 anInitialTestStruct 使用了指针和 malloc,但仍然没有得到想要的结果)
现在在 iphone 上,我将文件复制到项目中,然后执行以下操作:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"dat"];
NSData *myVecNSData = [[NSData alloc] initWithContentsOfFile:filePath options:NSDataReadingUncached error:&error];
if ( error ) {
NSLog(@"%@", error);
}
我没有得到正确的数据。有趣的是,如果我initWithContents
在 mac 上运行该方法并读取其中的文件,它似乎没问题。
因此,我认为 iphone / mac 处理文件系统的方式有所不同NSKeyedArchiver
....