App Delegate 发出警告:“id <UIApplicationDelegate>”不符合“UIAlertViewDelegate”协议
Posted
技术标签:
【中文标题】App Delegate 发出警告:“id <UIApplicationDelegate>”不符合“UIAlertViewDelegate”协议【英文标题】:App Delegate giving warning: 'id <UIApplicationDelegate>' does not conform to the 'UIAlertViewDelegate' protocol 【发布时间】:2010-10-24 02:22:14 【问题描述】:我目前在我的应用程序启动时使用 UIAlertView 和 UIAlertViewDelegate。一切正常。唯一的问题是,每次我引用 App Delegate 时都会收到警告“类型 'id' 不符合 'UIAlertViewDelegate' 协议”,给我大约 32 个警告。
谁能解释一下为什么我会收到此警告以及如何满足它?
提前致谢!
【问题讨论】:
【参考方案1】:我假设您的应用委托是您的警报视图委托?
如果是这样,您需要在应用委托的声明中告诉编译器。像这样:
@interface SomeAppDelegate : NSObject <UIApplicationDelegate, UIAlertViewDelegate>
// ... rest of interface
@end
然后你还需要实现所需的方法。
编辑:进一步考虑,我认为您在引用应用程序委托时可能缺少演员表。所以你有这样的东西:
MyAppDelegate* appDelegate = [[UIApplication sharedApplication] delegate];
// what you want is:
MyAppDelegate* appDelegate = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
【讨论】:
对不起,我应该添加代码 sn-p 但这是我已经拥有的,它仍在创建警告。这就是为什么我觉得它很奇怪。 还有一个你在哪里引用应用委托的例子?当您提出问题时,实际代码非常有用。 :) 也许您没有从 [[UIApplication sharedApplication] delegate] 转换结果 第二个想法,我认为缺少演员表很可能是问题所在。我在上面编辑了我的答案。 您编辑的代码有效。我正在使用第一个示例。我已经有了一个好主意,但你能解释一下为什么我需要在这种情况下进行演员表吗?我很好奇,对于其他偶然发现此页面的人...... 是的,就像大多数事情一样,今天早上我比昨晚清楚得多。 :) 所以 'appDelegate' 被声明为 MyAppDelegate*,这意味着它必须满足主线程上可能不存在,试试
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"My Title"
message:@"My message"
delegate:self cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:NO];
【讨论】:
以上是关于App Delegate 发出警告:“id <UIApplicationDelegate>”不符合“UIAlertViewDelegate”协议的主要内容,如果未能解决你的问题,请参考以下文章
无法在Webview上加载PDF文件并发出警告void SendDelegateMessage(NSInvocation *)
objc 中 id<delegate>这个类型在swift中怎么写
为啥 Xcode 在 appdelegate.h 文件中使用 AVAudioPlayer Delegate 协议时显示警告?
为什么R#警告Warning:Delegate subtraction has unpredictable result