2013-05-09 2 views
1

У меня есть один tabcontroller, и он имеет два сегмента. Один из них - UserInfo, другой - UserAvatar. Как только пользователь поместит в свою информацию, затем нажмите кнопку «Готово» и перейдите в главное меню, или пользователь может также выбрать свой аватар профиля, а затем нажать кнопку «Щелчок», а затем перейти в mainView. Однако, несмотря на то, что я запускаю код с режимом отладки, он запускается в завершенную кнопку, но в моем представлении userinfo метод delegeta не запускается!Метод делегата не запускается - iOS

в моем главном файле заголовка, я объявил мой протокол выглядит следующим образом:

@protocol MyUserInfoAvatarViewControllerDelegate <NSObject> 
@required 
-(void)userInfoEditingDone:(id)sender; 
@end 

@protocol MyUserInfoSettingsViewControllerDelegate <NSObject> 
@required 
-(void)userInfoEditingDone:(id)sender; 
@end 

в моем файле main.m, мой метод делегата

- (void)userInfoEditingDone:(id)sender { 
NSLog(@"Hello"); 
} 

MyUserInfoAvatarViewController.h

#import <UIKit/UIKit.h> 
#import "NEATMainViewController.h" 

@interface UserInfoAvatarViewController : UIViewController <ThumbImageViewDelegate > { 
    id __unsafe_unretained flipDelegate; 
} 

@property (nonatomic,unsafe_unretained) id <MyUserInfoAvatarViewControllerDelegate> 

flipDelegate; в следующем отвечая в MyUserInfoAvatarViewController.m

- (IBAction)doneButtonPressed:(id)sender { 
    // Tell the root view to flip back over to the main view 
    [self.flipDelegate userInfoEditingDone:self]; 
} 

MyUserInfoSettingsViewController.h

#import <UIKit/UIKit.h> 
    #import "NEATMainViewController.h" 
    @interface UserInfoSettingsViewController : UIViewController { 
     id __unsafe_unretained flipDelegate; 
    } 

    @property (nonatomic,unsafe_unretained) id <MyUserInfoSettingsViewControllerDelegate> flipDelegate; 

в следующем не называет мой метод делегата .. MyUserInfoSettingsViewController.m

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(done:)]; 
    self.navigationItem.rightBarButtonItem = btn; 
} 
- (void)done:(id)sender { 

    // Tell the root view to flip back over to the main view 
    [self.flipDelegate userInfoEditingDone:self]; 

} 
+1

Как установить делегат? –

+1

Где вы устанавливаете делегат & Где вы его определяете? – Mani

+0

Не могли бы вы сделать это более понятным? – casillas

ответ

1

Это потому, что вы flipDelegate: nil и более того, что вы определили delegate в main.m, который, как я думаю, не имеет класса, который реализует ваш протокол.

+0

Не могли бы вы посмотреть мой обновленный код и немного уточнить свой ответ? – casillas

+0

Ваше обновление такое же, как я думал. Почему, черт возьми, вам нужно делегировать в main.m? Как я уже сказал, вы должны назначить своего делегата, поскольку он все еще «ноль». например 'myUserInfoSettingsViewControllerObject.flipDelegate = self' –

+1

Большое спасибо Kumar! Он работает сейчас. Я ошибочно прокомментировал эту часть. – casillas

1

Проверьте, были ли вы пропущены. Он хотел бы это, например, сказать WeatherAPI класс:

@protocol WeatherAPIDelegate <NSObject> 

-(void)weatherData:(NSMutableDictionary *)dictData; 

@end 

@interface WeatherAPI : NSObject 
{ 
    id <WeatherAPIDelegate>delegate; 
} 
@property(nonatomic,strong)id <WeatherAPIDelegate> delegate; 
@end 

Вызов delegate метод, как это в WeatherAPI:

[delegate weatherData:dictWeatherInfo]; 

Теперь реализовать, скажем ViewController:

@interface ViewController : UIViewController<WeatherAPIDelegate> 
{ 

} 

Реализовать WeatherAPIDelegate метод в ViewController :

#pragma mark - 
#pragma mark WeatherAPIDelegate Method 

-(void)weatherData:(NSMutableDictionary *)dictData 
{ 

} 

Когда intializing WeatherAPI в ViewController

WeatherAPI *objWeatherAPI = [[WeatherAPI alloc]init]; 
[objWeatherAPI setDelegate:self];