委托方法未被触发 - iOS

问题描述:

我有一个tabcontroller,它有两个段。其中之一是UserInfo,另一个是UserAvatar。一旦用户放入他的信息,然后点击完成按钮,并进入主视图,或用户也可以选择他的个人资料头像,然后点击单击按钮,然后可以去mainView。然而,尽管我使用调试模式运行代码,但它运行到完成按钮,但在我的用户信息视图中,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

​​ 在以下

不叫我的委托方法.. 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

WeatherAPI您如何设置委托? – 2013-05-09 04:12:42

+1

你在哪里设置委托和你在哪里定义它? – Mani 2013-05-09 04:13:49

+0

你能否让它更清楚? – casillas 2013-05-09 04:13:53

这是因为你flipDelegatenil和更多的你已经定义代理方法main.m,我认为它没有任何实现你的协议的类。

+0

你可以看看我更新的代码,并详细说明你的答案。 – casillas 2013-05-09 04:21:40

+0

您的更新与我的想法相同。为什么你需要在main.m中委派代码?正如我所说,你必须设置你的委托,因为它仍然是'无'。例如'myUserInfoSettingsViewControllerObject.flipDelegate = self' – 2013-05-09 04:25:18

+1

非常感谢Kumar!它现在有效。我错误地评论了那部分。 – casillas 2013-05-09 05:06:25

检查是你错过了。应该喜欢这样的例子说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> 
{ 

} 

ViewController实现WeatherAPIDelegate方法:

#pragma mark - 
#pragma mark WeatherAPIDelegate Method 

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

} 

当intializing在ViewController

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