カスタム プロトコルのデリゲートを設定しようとしています。これには、必要なメソッドが 1 つあり、オブジェクトの配列をtwo の階層に戻すUITableViewControllers
ことができます。私の代理人は引き続き戻ってきnil
ます。このため、必要なメソッドが呼び出されることはありません。
my を使用したデータソースとデリゲートの実装がUITableViewControllers
競合を引き起こしているかどうか疑問に思っています。また、デリゲートを宣言するときに ARC が邪魔をしているのではないでしょうか?
UITableViewControllers
どちらも Storyboard を使用して構築されており、セグエを使用してナビゲートされていることに注意してくださいUINavigationController
(これが問題を引き起こしているかどうかは不明です)。
ナビゲーションは --> AlarmViewController
-->AlarmDetailsViewController
です。Alarm
アラームのすべての詳細を含むオブジェクトを myに作成し、AlarmDetailsViewController
それを配列に配置して、その配列を myに戻し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
AlarmViewController.h
@interface AlarmViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate, PassAlarmArray>
{
//...
AlarmDetailsViewController *alarmDetailsViewController;
}
@property (nonatomic, retain) AlarmDetailsViewController *alarmDetailsViewController;
@end
AlarmViewController.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
(viewDidLoad メソッドとは対照的に) AlarmViewController でボタンが押されたときに起動するメソッドでデリゲートを設定しようとしましたが、それも機能しません。
ここのどこかでロジック フロー エラーが発生したと想定しています。. . しかし、ほぼ 2 日間の捜索と再構築で発見されていません。うーん。