Xcode "AppDelegate *const __strong' to parameter of incompatible type" error

Jaume picture Jaume · Jun 21, 2012 · Viewed 15.2k times · Source

When I declare appDelegate interface as follows in order to set NSXMLParserDelegate, I receive some warnings from other views that are using [[UIApplication sharedApplication] delegate];

@interface AppDelegate : UIResponder <UIApplicationDelegate, NSXMLParserDelegate>

warning: Initializing 'AppDelegate *__strong' with an expression of incompatible type 'id'

However, if I remove it, another warning appears due to self setting of xmlParser,

@interface AppDelegate : UIResponder <UIApplicationDelegate>

warning: Sending 'AppDelegate *const __strong' to parameter of incompatible type 'id'

on

    xmlParser = [[NSXMLParser alloc] initWithData:receivedData];
    [xmlParser setDelegate:self];

How to remove both? thank you

Answer

David V picture David V · Jun 21, 2012

You really should not be making your AppDelegate publicly exposing interfaces. It creates very tight coupling between all your code. If other code (outside your AppDelegate) is needing an NSXMLParserDelegate you should make a different class for it.

It looks like your AppDelegate is needing to be a delegate for its own purposes. You can "privately" implement the interface by making a class extension in your AppDelegate.m file.

@interface AppDelegate() <NSXMLParserDelegate>
@end

Doing the above will remove the warning you received here:

[xmlParser setDelegate:self];