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*,这意味着它必须满足 AND 。但是 UIApplication 中的属性 'delegate' 被声明为类型 id。所以编译器只是警告你这个 id 类型不满足 。演员说,不,委托实际上是 MyAppDelegate*。【参考方案2】:

主线程上可能不存在,试试

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 *)

Cocoa:从另一个类调用 App Delegate 方法

objc 中 id<delegate>这个类型在swift中怎么写

为啥 Xcode 在 appdelegate.h 文件中使用 AVAudioPlayer Delegate 协议时显示警告?

为什么R#警告Warning:Delegate subtraction has unpredictable result

无法在测试中将 App Delegate 强制转换为 App Delegate