0
我得到的下一个问题,我有3次(一个UITableView,AND2视图控制器)我提出的下一个2层的协议:AddViewControllerDelegate和ViewAlarmControllerDelegate: AddViewController.h:方法不叫
@protocol AddViewControllerDelegate <NSObject>
- (void)addAlarm:(AlarmObject *)alarm;
@end
@interface AddViewController : UIViewController
{
id <AddViewControllerDelegate> delegate;
}
@property (retain) id delegate;
ViewAlarmController.h:
@protocol ViewAlarmControllerDelegate <NSObject>
- (void)changeAlarm:(AlarmObject *)alarm atIndex:(int) alarmID;
- (void)deleteAlarmAtIndex:(int) alarmID;
@end
@interface ViewAlarmController : UIViewController
{
id <ViewAlarmControllerDelegate> delegate;
}
@property (retain) id delegate;
然后在HomeViewController.h我进口休耕:
#import "AddViewController.h"
#import "ViewAlarmController.h"
#import "AlarmObject.h"
@interface HomeViewController : UITableViewController <AddViewControllerDelegate, ViewAlarmControllerDelegate>
我有方法的下一个声明为HomeViewController.m
- (void)addAlarm:(AlarmObject *)alarm{
[self.items addObject:alarm];
[self.tableView reloadData];
NSLog (@"added");
}
- (void)deleteAlarmAtIndex:(int)alarmID{
NSLog(@"alarmID: %d", alarmID);
[self.items removeObjectAtIndex:alarmID];
NSLog(@"items: %@", items);
[self.tableView reloadData];
}
- (void)changeAlarm:(AlarmObject *)alarm atIndex:(int)alarmID{
NSLog(@"change");
}
ViewAlarmController.m协议的方法的代码块的调用:
- (IBAction)save:(id)sender {
AlarmObject* alarmObj = [[AlarmObject alloc]init];
if(![self.alarmNameField.text isEqual: @""]){
[alarmObj setValue:self.alarmNameField.text forKey:@"alarmName"];
NSLog (@"change alarm id = %d", alarmID);
[self.delegate changeAlarm:alarmObj atIndex:alarmID];
}
[self dismissViewControllerAnimated:YES completion:nil];
}
- (IBAction)reverse:(id)sender {
alarmNameField.text = [alarm valueForKey:@"alarmName"];
}
- (IBAction)deleteAlarm:(id)sender {
NSLog (@"delete alarm id: %d",alarmID);
[self.delegate deleteAlarmAtIndex:alarmID];
[self dismissViewControllerAnimated:YES completion:nil];
}
的问题是,addAlarm作品,但是当我去到ViewAlarm中,我按下按钮来删除或保存更改,但不会调用deleteAlarmAtIndex和changeAlarm方法。
的问题是在未来的方法:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"addAlarmSegue"]){
AddViewController *avc = segue.destinationViewController;
avc.delegate = self;
}else if ([segue.identifier isEqualToString:@"viewAlarmSegue"]){
NSIndexPath *selectedRowIndex = [self.tableView indexPathForSelectedRow];
ViewAlarmController *vac = segue.destinationViewController;
[vac getObject:[self.items objectAtIndex:selectedRowIndex.row] withId:selectedRowIndex.row];
vac.delegate = self;
}
}
我没有写vac.delegate = self;
什么是重要的是你在哪里设置委托,以及当你对这些功能进行调用时是否为零。你可能想发布,因为它可能是你的问题。 – rooster117 2013-02-20 17:30:45
我同意,'delegate'最有可能是'nil'。 – Kevin 2013-02-20 17:37:35
我编辑了帖子并添加了调用代码块。以同样的方式,我从它的协议调用addViewController方法,并为它工作。 – user1792771 2013-02-20 17:37:43