这是我的代码。 AddItemViewController.h:
#import <UIKit/UIKit.h>
@class AddItemViewController, ChecklistItem;
@protocol AddItemViewControllerDelegate <NSObject>
@optional
- (void)addItemViewControllerDidCancel:(AddItemViewController *)controller;
- (void)addItemViewController:(AddItemViewController *)controller didFinishAddingItem:(ChecklistItem *)item;
@end
@interface AddItemViewController : UITableViewController
@property (weak, nonatomic) id<AddItemViewControllerDelegate> delegate;
@end
AddItemViewController.m:
#import "AddItemViewController.h"
#import "ChecklistItem.h"
@interface AddItemViewController () <UITextFieldDelegate>
- (IBAction)Done:(id)sender;
- (IBAction)Cancel:(id)sender;
@end
...
- (IBAction)Done:(id)sender {
ChecklistItem *item = [[ChecklistItem alloc]init];
item.text = self.textField.text;
item.checked = false;
if ([self.delegate respondsToSelector:@selector(addItemViewController:didFinishAddingItem:)]) {
[self.delegate addItemViewController:self didFinishAddingItem:item];
}
}
- (IBAction)Cancel:(id)sender {
[self.delegate addItemViewControllerDidCancel:self];
}
...
并且ChecklistViewController调用委托。 ChecklistViewController.m:
#import "ChecklistViewController.h"
#import "ChecklistItem.h"
#import "AddItemViewController.h"
@interface ChecklistViewController () <UITableViewDelegate, UITableViewDataSource, AddItemViewControllerDelegate>
@end
@implementation ChecklistViewController
...
- (void)viewDidLoad {
[super viewDidLoad];
AddItemViewController *addItem = [[AddItemViewController alloc]init];
addItem.delegate = self;
}
- (void)addItemViewControllerDidCancel:(AddItemViewController *)controller{
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)addItemViewController:(AddItemViewController *)controller didFinishAddingItem:(ChecklistItem *)item{
[self dismissViewControllerAnimated:YES completion:nil];
}
...
@end
我调试了应用程序。当AddItemViewController运行时,&#39; self.delegate&#39;是的。任何人都可以告诉我,我的代码有什么问题。谢谢你的意见!
答案 0 :(得分:3)
代表们被弱势关注。您已使用
正确设置了该功能@property (weak, nonatomic) id<AddItemViewControllerDelegate> delegate;
但是,由于它被弱化,其他东西必须持有对该委托对象的引用。
另外,我在代码中的任何地方都没有看到您分配委托对象的位置。所以,有几件事要尝试:
答案 1 :(得分:1)
您是否在ChecklistViewController中分配了委托?如果没有设置AddItemViewController的委托是ChecklistViewController实例,则委托方法不会调用。 像这样:
希望有所帮助。
答案 2 :(得分:0)
确保您已经分配了代表。
除此之外,您应该在让代表做任何事情之前进行检查:
src/Nest/QueryDsl/TermLevel/Range/RangeQuery.cs
答案 3 :(得分:0)
我不确定您如何在代码中显示AddItemViewController
。
viewDidLoad
中的所有内容是:
AddItemViewController *addItem = [[AddItemViewController alloc]init];
addItem.delegate = self;
但是你没有表现出来,所以它让我觉得它不正常,因为它是viewload函数的本地。
此外,您使用的alloc/init
ViewController
通常不会nib
,除非您以编程方式提供self
文件,我怀疑您是谁。
最可能你应该在你离开或出现该控制器的那一刻分配var secondCount = someData[a].lenght; // each has different
for( b = 1; b < secondCount; b++ ) {
allObjects[a][b] = secondObject;
}
代表。