Ios 通过performSelector传递CGSize
我有一个方法,返回一个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)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]
。