iphone - 编码 C 风格的整数数组

标签 iphone objective-c

我正在序列化一个支持 NSCoding 的类。我已经设置了 encodeWithCoderinitWithCoder,所有标准的 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/

相关文章:

objective-c - cocoa 教程麻烦

在调用的方法中,iOS UI 元素不会更新

objective-c - 是什么导致了所有这些 Objective-C 构建错误

ios - 如何使用通知请求禁用 View ?

iphone - 解析 XML 时数组被覆盖(Objective-C)

iOS - 在类型为 'isConnected' 的对象上找不到属性 'CBPeripheral'

iphone - 以编程方式使 UIView 居中

iphone - NSTimer 有时只触发?

ios - 在ios中获取正确的状态栏颜色

ios - UITextField 无法正确显示超出范围的文本