如何在屬性爲CGRect時設置實例的屬性。我想這樣做:Objective-C運行時 - 如何使用setValue來設置CGRect
CGRect rect = CGRectFromString(value);
[localClassObjectInstance setValue:rect forKey:key];
但編譯器不喜歡setValue;它說我將CGRect發送給不兼容類型「id」的參數。
感謝
如何在屬性爲CGRect時設置實例的屬性。我想這樣做:Objective-C運行時 - 如何使用setValue來設置CGRect
CGRect rect = CGRectFromString(value);
[localClassObjectInstance setValue:rect forKey:key];
但編譯器不喜歡setValue;它說我將CGRect發送給不兼容類型「id」的參數。
感謝
必須變換的CGRect至NSValue(反之亦然):
NSValue *myValue = [NSValue valueWithCGRect:rect];
NSValue是一個對象(所以它的類型 「ID」 的)。
然後你就可以得到的CGRect回來:
CGRect myRect = [myValue CGRectValue];
NSValue
和NSNumber
的處理情況下,當值不是一個對象 - 對象:
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答案)。
非常感謝 – whatdoesitallmean