Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 客观C反射;将参数传递给方法_Ios_Objective C_Reflection_Selector - Fatal编程技术网

Ios 客观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

我需要在目标c中使用反思/内省。我能够通过写作创建实例

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)];
}