2017-03-25 2 views
0

ヘッダー:ランタイム法による構造体の小数点変数から値を取得する方法object_getIvar

@interface DisplayConnection : NSObject 
{ 
    UIView *_view; 
    struct UnityDisplaySurfaceBase *_surface; 
} 
@property(readonly, nonatomic) struct UnityDisplaySurfaceBase *surface; 
@property(readonly, copy, nonatomic) UIView *view; 
@end 

私は_VIEWの値を取得することができますid value = object_getIvar(instance, _viewIvar); が、クラッシュ時にobject_getIvar(instance, _surfaceIvar)、および例外をキャッチすることはできません。

help、thx。

答えて

1

私はこの問題を解決するだけです。このソリューションはCの基本型/ Structではうまく動作します。 idはstructを指すことができません。 https://stackoverflow.com はを参照してください:https://www.bignerdranch.com

@interface DisplayConnection : NSObject 
{ 
    UIView *_view; 
    struct UnityDisplaySurfaceBase _surface;//without pointer value 
} 
@property(readonly, nonatomic) struct UnityDisplaySurfaceBase surface; 
@property(readonly, copy, nonatomic) UIView *view; 
@end 
@implementation DisplayConnection 
- (UnityDisplaySurfaceBase)someValue { 



Ivar inner = class_getInstanceVariable ([self class], "_surface"); 
ptrdiff_t offset = ivar_getOffset(inner); 
unsigned char *stuffBytes = (unsigned char *)(__bridge void *)self; 
UnityDisplaySurfaceBase someVar = * ((UnityDisplaySurfaceBase *)(stuffBytes + offset)); 

return someVar; 
} 
@end 

はを参照してください。

関連する問題