我一直在這個問題上一段時間,我對Mac上運行的應用程序,它存儲在一個結構類似這樣的座標信息:結構到Mac和iOS
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];
可正常工作,我得到一個文件,看起來像在它裏面的數據(參考我用指針和malloc的對anInitialTestStruct但仍然沒有得到期望的結果)
現在在iPhone上,我將文件複製到項目,並做到這一點:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"dat"];
NSData *myVecNSData = [[NSData alloc] initWithContentsOfFile:filePath options:NSDataReadingUncached error:&error];
if (error) {
NSLog(@"%@", error);
}
我沒有得到正確的數據備份。有趣的是,如果我在mac上運行initWithContents
方法,並在那裏讀取文件,它似乎是好的。
所以我想在iphone/mac的方式有不同的處理文件系統....我試過編碼數據使用NSKeyedArchiver
,但我得到一個異常,指出「難以理解的存檔... ..「
我想主要的問題是你正試圖在結構上使用對象方法。嘗試將結構包裝在NSValue中,稍後嘗試在NSdata中隱藏並寫入文件。當然要記住,當你恢復文件時,你會得到一個NSValue,你需要提取結構。 – Andrea 2013-04-05 07:37:34
謝謝安德烈,我試圖把它包裝在一個NSValue中,這似乎很好(雖然我寫它時,文件大小隻有8個字節)。我很難將數據恢復到NSValue中,我們是否將數據讀入NSData然後將其轉換爲NSValue?不太確定如何做到這一點,會閱讀並看看我能得到多遠。 – Darren 2013-04-05 15:28:08