2

インスタンスのプロパティがCGRectである場合、そのプロパティを設定するにはどうすればよいですか。私はこれをしたい:

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

しかし、コンパイラはsetValueを好みません。互換性のないタイプ「id」のパラメーターにCGRectを送信していると表示されます。

ありがとう

4

2 に答える 2

9

CGRectをNSValue(およびその逆)に変換する必要があります。


NSValue *myValue = [NSValue valueWithCGRect:rect];

NSValueはオブジェクトです(したがって、タイプは「id」です)。

次に、CGRectを次のように戻すことができます。


CGRect myRect = [myValue CGRectValue];
于 2012-06-07T13:02:22.070 に答える
2

NSValue値がobj-cオブジェクトでNSNumberはない場合を処理します。

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

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

GCRectMac OS X SDKで保存するには、NSRect最初NSRectFromCGRectNSRectToCGRect関数を使用するように変換する必要があります。iOSには、 代わりにvalueWithCGRect/CGRectValueメソッドがあります(@ viggio24の回答を参照)。

于 2012-06-07T13:01:57.440 に答える