gpt4 book ai didi

objective-c - 我在这个方法中发现了警告。找到多个名为 'state' 的方法?

转载 作者:行者123 更新时间:2023-12-02 17:44:37 25 4
gpt4 key购买 nike

我是 mac 开发的新手。这是我的代码,但我不明白这个警告。请帮助我。

  - (IBAction)toggleFiles:(id)sender
{
NSRect frame = [oWindow frame];
NSRect contentRect = [oWindow contentRectForFrameRect:frame];
float titlebarHeight = NSHeight(frame) - NSHeight(contentRect);

NSSize newSize = [sender state] == NSOnState ? sFilesExpandedSize : sFilesCollapsedSize;
frame.origin.y -= newSize.height - contentRect.size.height;
frame.size = newSize;
frame.size.height += titlebarHeight;

[oWindow setFrame:frame display:YES animate:YES];

[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:(int) [sender state] == NSOnState]
forKey:@"DisplayFiles"];
}

此处发现此警告 - 发现多个名为“state”的方法。如何解决这个问题。请帮助我。

最佳答案

sender 类型为 id。这意味着编译器会将编译器知道的任何地方定义的所有方法视为 sender 可以响应的可能集合。

不幸的是,声明了两个 state 方法(或更多)具有不同的参数。例如,一个可能会返回一个 BOOL,另一个可能会返回一个 NSUInteger

因此,编译器警告您在通用类型 (id) 对象上调用 state 可能会产生意想不到的结果,因为无法知道对象的类型返回值可能是。

解决方案?

sender 静态类型化为某个特定类(即 -(IBAction)toggleFiles:(SomeClass*)sender; 或类型转换返回值。

在任何一种情况下,向该操作方法添加类似 assert([sender isKindOfClass:[ExpectedClass class]); 的内容以进行防御。

关于objective-c - 我在这个方法中发现了警告。找到多个名为 'state' 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16621591/

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