我正在编写一个支持NSCoding的类。我设置了encodeWithCoder
和initWithCoder
,所有标准的Objective C数据类型都可以正常工作。
我正在努力解决的是如何编码一些简单的C数组。例如:
int bonusGrid[5];
int scoreGrid[10][10];
int solutionGrid[10][10];
int tileGrid[10][10];
如果没有将它们分解并逐个编码每个int,我不知道如何处理它们。是否有一种“标准”方式来处理C数组?
谢谢!
答案 0 :(得分:7)
一种方法是使用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上运行)。
答案 1 :(得分:0)
查看this问题的答案。它详细说明了将C数组转换为NSArray
对象需要执行的操作。