ios - 简单的自定义委托(delegate)没有被调用

标签 ios iphone ios7

让我们看看你们是否可以在这里找到错误......因为我现在真的被卡住了。

数据库管理器.h

@protocol DBManagerDelegate <NSObject>
@optional
- (void)    managerDidFinishUpdating:(id)controller;
@end
@interface DBManager : NSObject
@property (strong, nonatomic) id <DBManagerDelegate> delegate;
- (id)  init;
@end

数据库管理器.m
#import "DBManager.h"
@implementation DBManager
- (id)init {
     self = [super init];
     if (self) {
        [[self delegate] managerDidFinishUpdating:self];
     }
     return self;
} 

UIViewController.h
#import <UIKit/UIKit.h>
#import "DBManager.h"
@interface DBViewController : UIViewController <DBManagerDelegate>
@property (nonatomic, retain) DBManager *manager;
@end

UIViewController.m
#import "DBViewController.h"
@implementation DBViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
_manager = [[DBMataroManager alloc] init];
    [_manager setDelegate:self];
}
- (void)managerDidFinishUpdating:(id)controller {
    NSLog(@"Manager did finish");
}
@end

最佳答案

You should write like this,

- (id)initWithDelegate:(id)delegate {
    self = [super init];
    if (self) {
        _delegate = delegate;
        [_delegate managerDidFinishUpdating:self];
    }
    return self;
}

//Call it as follow
_manager = [[DBManager alloc] initWithDelegate:self];
[_manager setDelegate:self];

关于ios - 简单的自定义委托(delegate)没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20491762/

相关文章:

c# - 如何在 Xamarin.iOS 中播放 iOS SystemSound SoundID

wifi 网络更改时的 iPhone 通知

iphone - iPhone上的RSA/ECB/PKCS1Padding解密

exception - libc++abi.dylib : terminate_handler unexpectedly threw an exception - 0 stack trace iOS7/iOS 8

ios - 为 UITableViewCell 的 accessoryView 使用自定义图像并让它响应 UITableViewDelegate

ios - 部署 QML 外部模块到 IOS

ios - iOS7中,UINavigationController边缘滑动弹出异常

ios - 从自定义转换中引用 presentingViewController

iphone - tableview 删除部分中的最后一行

iphone - Objective-C - 何时使用 'self'