我正在尝试为我的自定义协议设置委托,该协议具有一个必需的方法,允许我将一组对象传递回两个UITableViewControllers
. 我的代表继续返回nil
。因此,我需要的方法永远不会被调用。
我想知道我的数据源和委托实现UITableViewControllers
是否导致冲突。此外,在声明代表时,也许 ARC 会妨碍您?
应该注意的是,两者UITableViewControllers
都是使用 Storyboard 构建的,并使用 a 中的 segues 进行导航UINavigationController
(不确定这是否会导致问题)。
导航是 --> AlarmViewController
--> AlarmDetailsViewController
。Alarm
我在我的对象中创建了一个AlarmDetailsViewController
包含警报的所有详细信息的对象,将其放入一个数组中,我想将该数组传回我的对象AlarmViewController
,以显示在表中的自定义单元格中。
注意:我想在这里使用委托模式。我对调用NSNotifications
或使用我的AppDelegate
类的解决方案不感兴趣。
AlarmDetailsViewController.h
#import "Alarm.h"
@protocol PassAlarmArray <NSObject>
@required
-(void) passAlarmsArray:(NSMutableArray *)theAlarmsArray;
@end
@interface AlarmDetailsViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate>
{
//.....
id <PassAlarmArray> passAlarmsArrayDelegate;
}
@property (nonatomic, retain) id <PassAlarmArray> passAlarmsArrayDelegate;
@end
AlarmDetailsViewController.m
#import "AlarmDetailsViewController.h"
@interface AlarmDetailsViewController ()
@end
@implementation AlarmDetailsViewController
@synthesize passAlarmsArrayDelegate;
-(void) viewWillDisappear:(BOOL)animated
{
NSLog(@"delegate = %@", self.passAlarmsArrayDelegate); // This prints nil
[[self passAlarmsArrayDelegate] passAlarmsArray:alarmsArray];
}
//....
@end
报警视图控制器.h
@interface AlarmViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate, PassAlarmArray>
{
//...
AlarmDetailsViewController *alarmDetailsViewController;
}
@property (nonatomic, retain) AlarmDetailsViewController *alarmDetailsViewController;
@end
报警视图控制器.m
#import "AlarmViewController.h"
#import "AlarmDetailsViewController.h"
#import "AlarmTableViewCell.h"
#import "Alarm.h"
@interface AlarmViewController ()
@end
@implementation AlarmViewController
@synthesize alarmDetailsViewController;
- (void)viewDidLoad
{
[super viewDidLoad];
// This is where I'm attempting to set the delegate
alarmDetailsViewController = [[AlarmDetailsViewController alloc]init];
[alarmDetailsViewController setPassAlarmsArrayDelegate:self];
}
//....
//My @required protocol method which never gets called since my delegate is nil
-(void) passAlarmsArray:(NSMutableArray *)theAlarmsArray
{
alarmsTableArray = theAlarmsArray;
NSLog(@"alarmsTableArray contains: %@", alarmsTableArray); // Never gets called due to delegate being nil
NSLog(@"theAlarmsArray contains: %@", theAlarmsArray); // Never gets called due to delegate being nil
}
@end
我试图将委托设置为在 AlarmViewController 中按下按钮时触发的方法(与 viewDidLoad 方法相反),但这也不起作用。
我假设我在这里的某个地方出现了逻辑流错误。. . 但近 2 天的狩猎和重建并没有发现它。啊。