gpt4 book ai didi

iphone - 忽略 "UIViewController may not respond to [method]"警告的方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:47:37 24 4
gpt4 key购买 nike

有没有办法让编译器忽略这个特定的警告?

这是我的做法:

UIViewController *firstViewController = AppDelegate.instance.viewController;

//open the view of the clicked subItem
if ([firstViewController respondsToSelector:@selector(openView:inView:)]) {
[firstViewController openView:subItem.itemText.text inView:activeScreen]; //warning on this line
}

我知道一种可行的方法是将 UIViewController 更改为 ViewController(类名)。但是此修复程序将来不会起作用,所以我正在寻找一种方法来忽略此警告。

它不会在未来工作,因为,我会做这样的事情:

//.m

UIViewController *firstViewController;

//.h

if (someCondition) {
firstViewController = AppDelegate.instance.viewController;
}
else{
firstViewController = AppDelegate.instance.otherViewController;
}

if ([firstViewController respondsToSelector:@selector(openView:inView:)]) {
[firstViewController openView:subItem.itemText.text inView:activeScreen]; //warning on this line
}

最佳答案

您应该在适当的时候将对象转换为正确的类型。请注意,如果您愿意,可以“转换”到协议(protocol)。 这让您可以安全地知道所需的方法已实现,而无需知 Prop 体类型。

如果您只想让编译器不报错,可以通过调用 performSelector: 来实现。 但是这样你就不会进行编译时检查。

[object performSelector:@selector(doSomething)]; 

参见讨论:Using -performSelector: vs. just calling the method

如果您只想将一个对象传递给您的选择器,可以使用变体 performSelector:withObject:

如果您想传递多个对象,您必须将它们包装在一个容器对象中,如iOS - How to implement a performSelector with multiple arguments and with afterDelay? 中所述。 .

关于iphone - 忽略 "UIViewController may not respond to [method]"警告的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14651396/

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