Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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 通过performSelector传递CGSize_Ios_Objective C - Fatal编程技术网

Ios 通过performSelector传递CGSize

Ios 通过performSelector传递CGSize,ios,objective-c,Ios,Objective C,我有一个方法,返回一个CGSize,如下所示 -(CGSize)theSizeToUse 然后在其他地方我有代码询问类是否响应这个选择器,如果响应,则使用performselector调用它 if ([myClass respondsToSelector:@selector(theSizeToUse)]) CGSize theSize = [myClass performSelector:@selector:(theSizeToUse)]; 这是行不通的,因为performSel

我有一个方法,返回一个CGSize,如下所示

-(CGSize)theSizeToUse
然后在其他地方我有代码询问类是否响应这个选择器,如果响应,则使用performselector调用它

if ([myClass respondsToSelector:@selector(theSizeToUse)])    CGSize
   theSize = [myClass performSelector:@selector:(theSizeToUse)];
这是行不通的,因为performSelector将返回一个id,而不是CGSize,所以我研究了如何将其包装成NSValue并返回一个NSValue,然后将其展开

查看NSValue的文档,很清楚该做什么。。。只需调用
NSValue-value-with-size
进行打包,然后调用
NSValue-sizeValue
进行解包。 一切都很顺利,直到我到了sizeValue。。。没有这样的属性或方法

我正在为iOS开发,目标是使用OS X 10.10的MacBook上的iOS 7


你知道我该怎么做吗?

你可能通过谷歌查到了
NSValue
?这将带您进入Mac文档,其中建议
+valueWithSize:
sizeValue
用于
NSSize
结构<代码>NSSize未在iOS上定义


对于iOS,您应该将
+值与cgsize:
-CGSizeValue
一起使用。
NSValue
的iOS文档是。

是否值得查询为什么要使用
performSelector:
?我假设这是因为根据给定的代码,这实际上是某种参数,而不是直接的
@选择器。否则,您可以只执行
[myClass theSizeToUse]
。另外,如果您正在调查这一问题,那么阅读键值编码和
valueForKey:
上定义的
NSObject
可能会有所帮助。但您仍然希望传递类,因此它不是严格相关的,只是可能很有趣。我有一个通用工厂方法,它返回各种大小不同的popover控件,并且不是所有的实现都有
SizeToUse
,因为我也没有使用委托,这是保证我不会炸掉任何东西的唯一方法。。。使用performSelector:这里避免使用
performSelector
的一个想法是创建并使用实现该方法的
@协议。任何你需要的课程都需要使用这个协议。是的,对不起,这就是我所说的委派。。。我使用了错误的单词。执行
respondsToSelector:
测试足以“避免a不响应选择器”异常;如果它确实是一个固定的方法名,那么您可以在
if
子句中执行
[myClass theSizeToUse]