I am working in iPhone app with 5 screens. I want to refresh the values in the screen 4th in UITabBarController. I have added @protocol in AppDelegate but it is not calling. This is the first time am using @protocol could you please help me to solve this issue,
In AppDelegate.h
@protocol ReloadViewControllerDelegate <NSObject>
-(void) refreshViewController:(NSString *)result;
@end
id refreshViewControllerDelegate;
@property (nonatomic, retain) id refreshViewControllerDelegate;
and i have synthesized.
In AppDelegare.m
@synthesize refreshViewControllerDelegate;
if ([refreshViewControllerDelegate conformsToProtocol:@protocol(ReloadViewControllerDelegate)])
{
[refreshViewControllerDelegate performSelectorOnMainThread:@selector(refreshViewController:) withObject:@"YES" waitUntilDone:NO];
}// Control not come inside of if Condition.... From here i want to update the fourthViewController..
But control not go inside of the if condition. Could you please guide me where am doing wrong?
In my 4th ViewController.h
#import "AppDelegate"
@interface fourthViewController : UIViewController <ReloadViewControllerDelegate>
In my 4th ViewController.m
-(void) refreshViewController:(NSString *)result
{
NSLog(@"Result : %@", result);
}
Can anyone please help me to do this? Thanks in advance.
You are calling this code:
But
refreshViewControllerDelegateis this:conformsToProtocolchecks to see if the object declares that it conforms to the protocol, which yours does not. If you want to specify conformity to a protocol you need to:EDIT
OK, on the
performSelectorOnMainThreadproblem… That method is provided in a category for NSThread, and is not declared in the NSObject protocol. So, if you want to call that, then you need to declare your type as NSObject, which conforms to your protocol.EDIT
OK, it looks like this is not a simple question about using a protocol, but a full tutorial. Since SO isn’t the place for such, I’ll try to give a brief one…
A protocol is an interface declaration.
That says there is a new protocol in town, with the name
ReloadChatViewControllerDelegateand it also conforms to theNSObjectprotocol. Any class that adopts the new protocol must provide an implementation ofrefreshViewController. You can make a protocol method optional, by putting in an@optionalsection.Now, let’s leave the adoption of the protocol for later. Say you are writing generic code, and you just want to know if the object you are given conforms to the protocol, and if so, invoke a method on it. Something like…
Now, the Bar class is providing a delegate property, so that it can be give some object that will help it do some work. However, that delegate object must at least be an
NSObject, and conform to theReloadChatViewControllerDelegateprotocol.Now, ObjC (and C) is quite permissive, so you can force an object to be any type you want, but then you deserve the crash you get. Now, when
blargis called, the delegate is notified to do some work.Since the property type of the delegate already says it conforms to the given protocol, there is no need to check for conformity. We can just call the delegate method. Note that we must see if the object implements any optional protocol methods.
However, if you want to be generic, and accept any object as a delegate (maybe you want to make it optional that the delegate conforms to some given protocol), then you can accept a plain
idand then check to see it it conforms. In that case, you could declare your delegate as just an id (or some other type).Now, in your code, you need to check for conformity.
OK, now you have a protocol defined, and you have code that calls methods on the protocol. Two caveats.
First, the delegate has to be set to an object.
nilwill respondfalsefor any method, so it will of course not conform, nor do anything when sent any message.Second, you have to make sure that your delegate declares conformity to the protocol. Just implementing the methods is not conformity. If a class does not explicitly specify that is conforms to a protocol, then
conformsToProtocolwill return false, even if it implements the methods of the protocol.So, let’s specify some class that will act as our delegate by conforming to the protocol.
It conforms to the protocol, provides an implementation for the mandatory method, and omits the optional one.
Now, if you ran this code, you should see that marvelous code in all its splendor.