Ios 客观C反射;将参数传递给方法
我需要在目标c中使用反思/内省。我能够通过写作创建实例Ios 客观C反射;将参数传递给方法,ios,objective-c,reflection,selector,Ios,Objective C,Reflection,Selector,我需要在目标c中使用反思/内省。我能够通过写作创建实例 id object = [[NSClassFromString(@"UIView") alloc]init]; 在这一点上,我还希望它设置它的框架 我已经写了下面的代码,但它没有编译 SEL method2 = NSSelectorFromString(@"setFrame:"); CGRect rect = CGRectMake(0, 0, 1024,768); NSValue * value = [NSValue valueWithC
id object = [[NSClassFromString(@"UIView") alloc]init];
在这一点上,我还希望它设置它的框架
我已经写了下面的代码,但它没有编译
SEL method2 = NSSelectorFromString(@"setFrame:");
CGRect rect = CGRectMake(0, 0, 1024,768);
NSValue * value = [NSValue valueWithCGRect:rect];
[object performSelector:method2 withObject:value];
如何将参数传递给对象的setFrame或setBackgroundColor方法
你能帮我弄清楚吗
提前谢谢
编辑
我已经找到了我想要的解决方案
有一个名为CGRectFromString(NSString*)的方法
它解决了我的问题
我可以用下面的代码设置视图的框架
SEL method2 = NSSelectorFromString(@"setFrame:");
if([object respondsToSelector:method2])
{
[object setFrame:CGRectFromString(@"{{0, 0}, {1024, 768}}")];
}
试试这样,在我看来,它更清晰、更直截了当。请注意,
respondsToSelector
只是通过向未实现它的对象发送方法来避免崩溃(在您的问题中,您并没有检查它,因此在您的情况下可能不需要)
哪一行不编译?您收到了什么错误消息?我这边没有任何问题可能是您在
setFrame:
method中遇到了问题您的代码编译并运行得很好。请解释您的问题并显示错误消息。-目前,人们只是猜测…实际上,我错了,我的代码可以编译,但是,没有affect@Basheer_CAD不是在这种情况下,您没有收到任何警告?@Basheer\u CAD您可以向对象(id)发送任何方法。如果该方法不存在,应用程序将崩溃,这就是为什么您必须使用respondsToSelector保护它。但是代码编译得非常好,没有任何警告。好的,只需将@selector()与NSSelectorFromString(@“setFrame:”)更改为匹配以下问题:)如果您已经知道要使用setFrame:
,因为它在直接调用中是硬编码的,为什么不使用@selector(setFrame:)
?
id object = [[NSClassFromString(@"UIView") alloc]init];
if(object respondsToSelector:@selector(setFrame:)){
[object setFrame:CGRectMake(0, 0, 1024, 768)];
}