2012-06-07 2 views
2

Как установить свойство экземпляра, когда это свойство является CGRect. Я хочу сделать это:Objective-C runtime - как использовать setValue для установки CGRect

CGRect rect = CGRectFromString(value); 
[localClassObjectInstance setValue:rect forKey:key]; 

но компилятор не любит setValue; он говорит, что я отправляю CGRect в параметр несовместимого типа 'id'.

Благодаря

ответ

9

Вы должны преобразовать CGRect в NSValue (и наоборот):


NSValue *myValue = [NSValue valueWithCGRect:rect]; 

NSValue является объектом (так что это типа "ID").

Тогда вы можете получить CGRect назад с:


CGRect myRect = [myValue CGRectValue]; 
+0

Большое спасибо – whatdoesitallmean

2

NSValue и NSNumber должны обрабатывать случаи, когда значение не является Obj-C объект:

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

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

Для хранения GCRect с Mac OS X SDK, вы должны преобразовать его в NSRect сначала используя NSRectFromCGRect и NSRectToCGRect функции. В iOS есть методы valueWithCGRect/CGRectValue (см. Ответ @ viggio24).