Axe*_*eva 5 iphone objective-c
我正在编写一个支持NSCoding的类.我设置encodeWithCoder和initWithCoder,和所有的标准Objective C的数据类型,做工精细.
我正在努力的是如何编码一些简单的C数组.例如:
int bonusGrid[5];
int scoreGrid[10][10];
int solutionGrid[10][10];
int tileGrid[10][10];
Run Code Online (Sandbox Code Playgroud)
如果没有将它们分解并逐个编码每个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;
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用memcpy()将数据移回到阵列中,但这不正确,并且不能保证在所有系统上都能正常工作(它可以在iPhone和Mac上运行).
| 归档时间: |
|
| 查看次数: |
1142 次 |
| 最近记录: |