Objective-C运行时-如何使用setValue设置CGRect
当实例的属性是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 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];