gpt4 book ai didi

ios - 使用“performSelector”返回非id结果

转载 作者:行者123 更新时间:2023-12-01 19:24:39 27 4
gpt4 key购买 nike

为了进行调试,我需要从一段代码中调用CGFloat访问器方法,该代码根据iVar的名称生成选择器。

- (CGFloat) myIVar {
return myIVar;
}

设置者具有以下形式:
- (void) setMyIVar: (CGFloat) p_myIVar {
[self willChangeValueForKey: @"myIVar"];
myIVar = p_myIVar;
[self didChangeValueForKey: @"myIVar"];
}

为了跟踪回调的过程,我在“observeValueForKeyPath ...”代码的“didChange”部分放置了一个调试部分,并且我想调用getter访问器以打印出结果;
SEL genericGetter = NSSelectorFromString (p_keyPath);  // i.e. '[self myIVar]'
NSLog (@"Key: %@ changed to %3.6f", p_keyPath, [self performSelector: genericGetter]);

问题是'perormSelector'返回的ID不能转换为CGFloat。此外,Apple的文档还提供了3个关于performSelector的示例,所有示例都返回ID,但它们没有告诉您如何处理非ID结果。

谁能告诉我如何实现我要使用的逻辑?
非常感谢VV。

最佳答案

您可以使用valueForKey免费获取包装:

同样,鉴于此:

- (CGFloat) myIVar {
return myIVar;
}

这样的事情会起作用:
id *value = [self valueForKey:@"myIVar"];
// if myIVar is a float, then value will be of type NSNumber
// if myIVar were an NSString, then value will be an NSString

如果您正在做的只是记录此内容,则可以直接记录“值”。如果我正确地理解了您的需求,那应该比您现在做的要简单。

关于ios - 使用“performSelector”返回非id结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8367654/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com