委托未设置(设置正确)

时间:2015-08-18 07:58:39

标签: ios objective-c delegates

我无法弄清楚为什么我要为这个电话获得一个零代表。好像我正在设置委托就好了。

LogoutViewController.h

@protocol SomeNewDelegate <NSObject>

@required
- (void)someMethod;
@end

@interface LogoutViewController : UIViewController

@property (nonatomic, weak) id<SomeNewDelegate> delegate;

LogoutViewController.m

- (IBAction)logoutButtonTapped:(id)sender {
    NSLog(@"logout tapped");
    [self.delegate someMethod];
    [self dismissViewControllerAnimated:YES completion:nil];
}

MainViewController.m

@interface MainViewController () <UIScrollViewDelegate, SomeNewDelegate>

@property (nonatomic, strong) LogoutViewController *logoutVC;

@end

@implementation MainViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    self.logoutVC.delegate = self;
}

- (void)someMethod {
    NSLog(@"someMethod");
}

someMethod永远不会被调用,我不明白为什么委托是零。有什么帮助吗?

3 个答案:

答案 0 :(得分:0)

在viewDidload中使用以下代码

LogoutViewController *logoutVC = [[LogoutViewController alloc]init];
logoutVC.delegate = self;

从属性中删除LogoutViewController。 我已经使用过这个并且工作正常。

希望它为你工作。

.h文件中的编辑代码

@protocol syncDataDelegate <NSObject>
@required
- (void) offlineSyncProcess;
@end

@interface LoginViewController : UIViewController
{
    id <syncDataDelegate> syncDelegate;
}
@property (retain) id syncDelegate;
<。>文件中的

@implementation LoginViewController
{
  // your code 
}
@synthesize syncDelegate;

- (IBAction)logoutButtonTapped:(id)sender {
    NSLog(@"logout tapped");
    [syncDelegate offlineSyncProcess];
}

您可以从任何方法在LoginViewController.m文件中调用委托方法。

在My Delegate实施中 在.m文件

@interface MainViewController ()<syncDataDelegate>

@end
@implementation MainViewController

- (void)viewDidLoad
{
     [super viewDidLoad];
     LoginViewController *LVC = [[LoginViewController alloc]init];
     LVC.syncDelegate = self;
}

现在在这里使用委托方法

- (void) offlineSyncProcess
{
    // your code here
}

此代码在我的项目中有效,请在项目中进行检查。

答案 1 :(得分:0)

当您尝试为其设置委托属性时,请确保您的logoutVC不是nil。

您可以在LogoutViewController.m中实现setDelegate方法。然后使用断点来确保它被调用。

答案 2 :(得分:-1)

委托是零,因为你的logoutVC是零,你没有为logoutvc属性分配内存。

在self.logoutVC.delegate = self之前  添加以下代码

self.logoutVC = [[LogoutViewController alloc] init];

一切都将自动开始。