Man*_*gan 1 objective-c ios7 ios7.1
我有一系列按钮(IBOutletCollections)名称"topFriends"..我需要设置隐藏topFriends(数组名称)的所有按钮.
[self.topInFriends makeObjectsPerformSelector:@selector(setHidden:) withObject:[NSNumber numberWithBool:YES]];
Run Code Online (Sandbox Code Playgroud)
实际上它在iOS7上工作......但它不适用于iOS 7.1.
但是当我尝试像下面那样枚举数组时,那么它适用于iOS7和7.1
[self.topInFriends enumerateObjectsUsingBlock:^(UIButton * obj, NSUInteger idx, BOOL *stop) {
obj.hidden=YES;
}];
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我为什么makeObjectsPerformSelector功能在iOS 7.1中不起作用.我真的很沮丧地找到问题..请任何人帮助我..提前谢谢
我从文档中得到了这个makeObjectsPerformSelector,这是SEL该方法中参数的描述
一个选择器,用于标识要发送到阵列中对象的消息.该方法必须采用类型为id的单个参数,并且不得具有修改接收数组的副作用.
然后我跑这条线
[self.topInFriends makeObjectsPerformSelector:@selector(setHidden:)
withObject:@"Fcuked up"];
Run Code Online (Sandbox Code Playgroud)
它隐藏了按钮,所以你传递的内容并不重要.它也是有意义的,因为你的方法期望a BOOL并且你给它一个对象,我不知道确切的内部实现,makeObjectsPerformSelector但我可以得出一些结论
当你传递一些对象说@"abc"或者@YES当makeObjectsPerformSelector你调用你setHidden的传递对象时,它显然也有一些地址,setHidden它将你的对象(地址)转换成BOOL.假设你的地址是
@"Fcuked up" ---> 0x7cde450034798976 (assuming 64 bit pointer)
@YES ---> 0x7cde450000000000
Run Code Online (Sandbox Code Playgroud)
对于第一种情况,值BOOL将变为真,因为它的LSB非零,而对于第二种情况,BOOL由于LSB 为零,因此将变为假.
id这个答案中出现的所有想法都是我的.与生活或死亡的其他人有任何相似之处纯属巧合.
| 归档时间: |
|
| 查看次数: |
585 次 |
| 最近记录: |