我正在尝试通过 GameCenter 同步对象,并在两侧使用 KVC 访问它们的值。设置数值 usingsetValue:forKey:
要求它们是NSNumber
对象。
NSValue initWithBytes:objCType:
给我对象,甚至传递int,float等NSValue
的编码。
你们有更好的解决方案而不是手动检查编码吗?
- (NSValue*)smartValueWithBytes:(void*)value objCType:(const char*)type
{
if (0 == strcmp(type, @encode(int)))
{
int tmp;
memcpy(&tmp, value, sizeof(tmp));
return [NSNumber numberWithInt:tmp];
}
if (0 == strcmp(type, @encode(BOOL)))
{
BOOL tmp;
memcpy(&tmp, value, sizeof(tmp));
return [NSNumber numberWithBool:tmp];
}
//etc...
return [NSValue valueWithBytes:value objCType:type];
}
如果这是要走的路,那么我需要为 KVC 处理NSNumber
的唯一子类是什么?NSValue