makeObjectsPerformSelector不适用于IOS7.1
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了makeObjectsPerformSelector不适用于IOS7.1相关的知识,希望对你有一定的参考价值。
我有一系列按钮(IBOutletCollections)名称“topFriends”..我需要设置隐藏topFriends(数组名称)的所有按钮。
[self.topInFriends makeObjectsPerformSelector:@selector(setHidden:) withObject:[NSNumber numberWithBool:YES]];
实际上它在ios7上工作......但它不适用于iOS 7.1。
但是当我尝试像下面那样枚举数组时,它适用于iOS 7和7.1
[self.topInFriends enumerateObjectsUsingBlock:^(UIButton * obj, NSUInteger idx, BOOL *stop) {
obj.hidden=YES;
}];
任何人都可以告诉我为什么makeObjectsPerformSelector功能在iOS 7.1中不起作用。我真的很沮丧地找到问题..请任何人帮助我..提前谢谢
我从makeObjectsPerformSelector
的文档中得到了这个,这是在这个方法中参数SEL
的描述
一个选择器,用于标识要发送到阵列中对象的消息。该方法必须采用类型为id的单个参数,并且不得具有修改接收数组的副作用。
然后我跑这条线
[self.topInFriends makeObjectsPerformSelector:@selector(setHidden:)
withObject:@"Fcuked up"];
它隐藏了按钮,所以你传递的内容并不重要。它也是有意义的,因为你的方法期望一个BOOL
,你给它一个对象,我不知道makeObjectsPerformSelector
的确切内部实现,但我可以得出一些观点
当你传递一些物体时说@"abc"
或@YES
,当makeObjectsPerformSelector
调用你的setHidden
然后它传递物体,显然也有一些地址,对setHidden
并且它将你的物体(地址)转换成BOOL
。假设你的地址是
@"Fcuked up" ---> 0x7cde450034798976 (assuming 64 bit pointer)
@YES ---> 0x7cde450000000000
对于第一种情况,BOOL
的值将变为真,因为它的LSB非零,而对于第二种情况,BOOL
将变为假,因为LSB为零。
In whole you should respect apple docs and you should not call a method which doesn't take parameter as id
这个答案中出现的所有想法都是我的。与生活或死亡的其他人有任何相似之处纯属巧合。
请改用[self.topInFriends setValue:@YES forKey:@"hidden"];
。
以上是关于makeObjectsPerformSelector不适用于IOS7.1的主要内容,如果未能解决你的问题,请参考以下文章