我正在序列化一个支持 NSCoding 的类。我已经设置了 encodeWithCoder
和 initWithCoder
,所有标准的 Objective C 数据类型都可以正常工作。
我正在努力解决的问题是如何对一些简单的 C 数组进行编码。例如:
int bonusGrid[5];
int scoreGrid[10][10];
int solutionGrid[10][10];
int tileGrid[10][10];
除了将它们分解并逐一编码每个 int 之外,我不确定如何处理它们。是否有处理 C 数组的“标准”方法?
谢谢!
最佳答案
一种方法是使用 NSData 来包装数组。
- (void)encodeWithCoder:(NSCoder *)coder {
[coder encodeObject:[NSData dataWithBytes:(void*)bonusGrid length:5*sizeof(int)] forKey:@"bonusGrid"];
[coder encodeObject:[NSData dataWithBytes:(void*)scoreGrid length:10*10*sizeof(int)] forKey:@"scoreGrid"];
...
}
- (id)initWithCoder:(NSCoder *)coder
if((self = [super initWithCoder:coder])) {
NSData *data = [coder objectForKey:@"bonusGrid"];
int *temporary = (int*)[data bytes];
for(unsigned char i = 0; i < 5; ++i) bonusGrid[i] = temporary[i];
data = [coder objectForKey:@"scoreGrid"];
temporary = (int*)[data bytes];
for(unsigned char i = 0; i < 10; ++i)
for(unsigned char j = 0; j < 10; ++j)
scoreGrid[i][j] = temporary[i*10 + j];
...
}
return self;
}
您也可以使用 memcpy()
将数据移回您的数组,但这并不合适,也不能保证在所有系统上都能正常工作(它在 iPhone 和 mac 上工作)。
关于iphone - 编码 C 风格的整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4975835/