作为 obj-c 的新手,我一直在研究 makeObjectsPerformSelector 方法。
我有两个数组,分别包含 UISteppers 和 UITextfields:
_stepper = [NSArray arrayWithObjects:
_stepMa, _stepMafree, _stepDe, _stepDefree, _stepFl, _stepFlfree,
_stepEn, _stepEnfree, _stepEnBl, _stepEnBlfree, _stepVo, _stepVofree,
_stepVe, _stepVefree, _stepIn, _stepInfree, _stepOt, _stepOtfree,
_stepIn170, _stepIn170free, _stepZy, _stepZyfree,
nil];
_fields = [NSArray arrayWithObjects:
_MaFeld, _MaFeldfree, _DeFeld, _DeFeldfree, _FlFeld, _FlFeldfree,
_EnFeld, _EnFeldfree, _EnBlFeld, _EnBlFeldfree, _VoFeld, _VoFeldfree,
_VeFeld, _VeFeldfree, _InFeld, _InFeldfree, _OtFeld, _OtFeldfree,
_InFeld170, _InFeld170free, _ZyFeld, _ZyFeldfree,
nil];
我想通过某种方式重置它们:
- (void) resetFields
{
[_stepper enumerateObjectsUsingBlock: ^(UIStepper* stepper, NSUInteger idx, BOOL *stop)
{
stepper.value = 0;
}];
[_fields enumerateObjectsUsingBlock: ^(UITextField* field, NSUInteger idx, BOOL *stop)
{
field.text = @"0";
}];
}
按预期工作。
尝试缩短该代码,我用上述方法试试运气:
- (void) resetFields
{
[_stepper makeObjectsPerformSelector:@selector(value) withObject:0];
[_fields makeObjectsPerformSelector:@selector(text) withObject:@"0"];
}
这没有影响......我想有些事情我没有考虑,但是什么?
谢谢!
最佳答案
要绕过 int 是 C 类型而不是对象的问题,请使用 KVC(键值编码)。如果您在 NSArray 对象上调用 setValue:forKey:,方法 setValue:forKey: 将调用数组的每个对象。此外,KVC 还管理着所有原始的东西。
[_stepper setValue:@0 forKey:@"value"];
[_fields setValue:@"0" forKey:@"text"];
关于ios - Obj C 和 makeObjectsPerformSelector - 我是否忽略了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24556564/