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