简体   繁体   English

代表方法未触发-iOS

[英]Delegate method is not fired- iOS

I have one tabcontroller and it has two segments. 我有一个tabcontroller,它有两个部分。 One of them is UserInfo, another one is UserAvatar. 其中一个是UserInfo,另一个是UserAvatar。 Once user put into his info, then click on done button and go to mainview, or user could also choose his profile avatar and then click on click button and then could go to mainView. 一旦用户输入了自己的信息,然后单击“完成”按钮进入主视图,或者用户也可以选择其个人资料头像,然后单击“单击”按钮然后进入主视图。 However, evethough I run by code with debug mode, it runs into done button, but in my userinfo view, delegeta method is not fired! 但是,尽管我以调试模式通过代码运行,但是它运行到完成按钮中,但是在我的userinfo视图中,不会触发delegeta方法!

in my Main header file, I declared my protocol is as follow: 在我的主头文件中,我声明我的协议如下:

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

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

in my main.m file, my delegate method 在我的main.m文件中,我的委托方法

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

MyUserInfoAvatarViewController.h MyUserInfoAvatarViewController.h

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

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

@property (nonatomic,unsafe_unretained) id <MyUserInfoAvatarViewControllerDelegate> 

flipDelegate; flipDelegate; in the following responding in MyUserInfoAvatarViewController.m 在以下响应中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.h

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

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

in the following is not calling my delegate method.. MyUserInfoSettingsViewController.m 在下面不调用我的委托方法。.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];

}

这是因为您的flipDelegate nil ,而且您在main.m定义了委托方法,我认为它没有任何实现您协议的类。

Check were you missed. 检查你错过了。 It should like this for example say WeatherAPI class : 例如,应该这样说WeatherAPI class:

@protocol WeatherAPIDelegate <NSObject>

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

@end

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

Call delegate method like this in WeatherAPI : WeatherAPI调用这样的delegate方法:

[delegate weatherData:dictWeatherInfo];

Now implement in say ViewController : 现在在说ViewController实现:

@interface ViewController : UIViewController<WeatherAPIDelegate>
{

}

Implement WeatherAPIDelegate method in ViewController : ViewController实现WeatherAPIDelegate方法:

#pragma mark -
#pragma mark WeatherAPIDelegate Method

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

}

When intializing WeatherAPI in ViewController ViewController初始化WeatherAPI

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM