Objective-C运行时-如何使用setValue设置CGRect

Objective-C运行时-如何使用setValue设置CGRect,objective-c,key-value-coding,Objective C,Key Value Coding,当实例的属性是CGRect时,如何设置该属性。我想这样做: CGRect rect = CGRectFromString(value); [localClassObjectInstance setValue:rect forKey:key]; 但是编译器不喜欢setValue;它说我正在向不兼容类型“id”的参数发送CGRect 感谢NSValue和NSNumber处理值不是obj-c对象的情况: NSRect rect = ...; [object setValue:[NSValue val

当实例的属性是CGRect时,如何设置该属性。我想这样做:

CGRect rect = CGRectFromString(value);
[localClassObjectInstance setValue:rect forKey:key];
但是编译器不喜欢setValue;它说我正在向不兼容类型“id”的参数发送CGRect


感谢

NSValue
NSNumber
处理值不是obj-c对象的情况:

NSRect rect = ...;
[object setValue:[NSValue valueWithRect:rect] forKey:key];

NSValue* val = [object valueForKey:key];
NSRect extractedRect = [val rectValue];

要使用Mac OS X SDK存储
GCRect
,必须首先使用
NSRectFromCGRect
NSRectToCGRect
函数将其转换为
NSRect
。在iOS上,有
valueWithCGRect
/
CGRectValue
方法(请参见@viggio24 answer)。

必须将CGRect转换为NSValue(反之亦然):

NSValue是一个对象(因此它的类型为“id”)

然后,您可以使用以下命令返回CGRect:


CGRect myRect = [myValue CGRectValue];

CGRect myRect = [myValue CGRectValue];