我是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"];
}
Run Code Online (Sandbox Code Playgroud)
此警告发现 - 找到了名为"state"的多个方法.如何解决这个问题.请帮我.
sender输入为id.这意味着编译器会将编译器知道的任何地方定义的所有方法都视为sender可以响应的可能事物集.
不幸的是,声明有两种state方法(或更多)具有不同的论证.有人可能会返回一个BOOL和一个可能返回NSUInteger,例如.
因此,编译器警告您调用state一般类型的(id)对象可能会产生意外的结果,因为无法知道返回值的类型可能是什么.
解?
要么静态地键入sender某个特定的类(即 - (IBAction)toggleFiles :( SomeClass*)sender;或者对返回值进行类型转换.
在任何一种情况下,添加类似于assert([sender isKindOfClass:[ExpectedClass class]);该动作方法的东西都是防御性的.
| 归档时间: |
|
| 查看次数: |
303 次 |
| 最近记录: |