我有一個二維陣列狀,例如:的OBJ-C:如何將2D數組c添加到NSData的
struct myStruct twoDarray[maxX][maxY];
我可以在陣列上進行迭代,並看到所有的值被適當地分配。 我試圖把這個數組轉換成一個NSData對象像這樣:
NSData *myData = [NSData dataWithBytes:&twoDarray length:sizeof(struct myStruct) * actualX * actualY];
此任務成功。 myData.length
顯示預期的大小(struct * x * y)。在這個問題上接受的答案表明,這是正確的語法:Is it possible to store 2D array in info.plist
最後,我嘗試用一個循環來讀回數組:
int start = 0;
for (int x = 0; x < actualX; x++)
{
for (int y = 0; y < actualY; y++)
{
struct myStruct readBack
[myData getBytes:&readBack range:NSMakeRange(start, sizeof(struct myStruct))];
start += sizeof(struct myStruct)
}
}
不過,我只在提取循環時,獲得有效數據x = 0。如果x = 0,則y的所有值的所有結構都存在且正確。對於任何x大於或等於1,readBack
中的所有值都爲0.
我不確定此時我會出錯。如果我通過twoDarray
進行迭代,它肯定有所有x值的數據。爲什麼當x大於或等於1時數據爲零?
編寫數據到臨時數據對象是沒有必要的。您可以使用['appendData:length:'](https://developer.apple.com/reference/foundation/nsmutabledata/1407704-appendbytes?language=objc)。 – clemens
啊是的,那會更好 – Fonix
是的,迭代方法肯定有效,可能是可以接受的。但我希望單一的操作來複制整個塊。我想知道,是一個2d C陣列在內存中不連續和順序嗎? – Thunk