了解自定义委托

时间:2011-06-23 00:45:42

标签: objective-c ios cocoa-touch modalviewcontroller delegation

所以我有一个应用程序,在应用程序中有一个tableView,我有uinavigationbarbutton呈现模式viewController。当用户点击模态界面中的go按钮时,我想要它取消模态视图并获取模态视图中的一些信息。我将把这些信息放在tableView中。为此,我编写了一个自定义委托,但它不起作用。我在下面提供了我的代码。谢谢你的帮助。

TrackerMainViewController.h // tableView

#import "NewItemViewController.h"
@interface TrackerMainViewController : UITableViewController <UITableViewDelegate, DetailDelegate>

TrackerMainViewController.m

 -(void)finishedAddingFoodItemFromDetail:(NSDate *)date whatWasEaten:(NSString *)whatFood whichMeal:(NSString *)meal {
     NSLog(@"in delegate method here");
     [self.tableView reloadData];
     [self dismissModalViewControllerAnimated:YES];
}

NewItemViewController.h //模态视图

@protocol DetailDelegate <NSObject>
-(void)finishedAddingFoodItemFromDetail:(NSDate *)date whatWasEaten:(NSString *)whatFood whichMeal:(NSString *)meal;
@end

@interface NewItemViewController : UIViewController {
     id <DetailDelegate> _delegate;
}
@property (nonatomic, retain) id <DetailDelegate> delegate;
@end

NewItemViewController.h

@implementation NewItemViewController
@synthesize delegate = _delegate;
//the go button in the modal view

- (IBAction)Go:(id)sender {
[self.delegate finishedAddingFoodItemFromDetail:[NSDate date] whatWasEaten:@"chicken" whichMeal:@"breakfast"];
}

我在goview按钮和tableview中的委托实现中都有一个日志,但只调用了go日志。

由于

1 个答案:

答案 0 :(得分:3)

在您发布的代码中,您没有设置委托。您需要将其设置为与此detailView.delegate = self类似,否则为nil。您可以在没有任何警告和错误的情况下向nil - 对象发送消息,不会发生任何事情。