我在声明自己的委托时遇到了问题。嗯......这不完全正确:我已经声明了,当我构建项目时,编译器报告没有问题。我用这种方式声明了它:
我创建了一个文件(enviarDatos.h)来声明协议:
@protocol enviarDatos <NSObject>
- (void)addItemViewController:(NSMutableArray *)item;
@end
在Vista2.h(ViewController)文件中,我导入了文件enviarDatos.h并声明了一个属性:
@property (nonatomic, weak) id <enviarDatos> delegare;
在Vista2.m(ViewController)文件中,我使用协议方法:
@interface ViewController : UIViewController <enviarDatos> {
最后,在ViewController.m文件中,我实现了委托方法:
- (void)addItemViewController:(NSMutableArray *)ar {
origen = ar;
}
有人看错了吗?从不执行的最后一个函数的代码。
感谢您的帮助。
编辑:
我需要的是从Vista2(另一个视图控制器)更改ViewController中的数组
答案 0 :(得分:0)
啊,看起来你在一个错误的地方声明了委托属性。
您应该在enviarDatos.h中声明属性委托。
@property (nonatomic, weak) id <enviarDatos> delegate;
然后在Vista2.m中你会做这样的事情......
EnviarDatos *myObject = [[EnviarDatos alloc] init];
myObject.delegate = self;
然后设置EnviarDatos对象并将Vista2对象指定为委托。
现在,在EnviarDatos.m中你可以运行......
[self.delegate addItemViewController:someObjectArray];
然后这将在Vista2对象中运行该代码。
代理用于回调创建它们的对象(或其他一些对象)。如果您创建一个对象,然后想要在其中运行一个方法,那么您将不需要委托。
答案 1 :(得分:0)
addItemViewController
的条件吗? 您似乎走在正确的轨道上,但是您确定要将委托设置为
[yourObject setDelegate: self];
您是否尝试过调试?如果在那里设置断点,调试器是否会在addItemViewController
暂停?你能否确认该方法中的委托不是空的?我可能会发布一些代码,但除了代理人的分配外,你似乎是正确的,我认为你应该检查一下。
答案 2 :(得分:0)
Then create delegate property in next view(child view) & set it to self in parent view while pushing or showing child view.
ParentView.m
1.Implement protocol methods
- (void)addItemViewController:(NSMutableArray *)ar
{
origen = ar;
}
2.While showing child view
ChildViewController *child = [[ChildViewController alloc] init];
child.delegate = self;
//present child view
ChildView.h
@property (nonatomic, weak) id <enviarDatos> delegare;
ChildView.m
-(void) anyMethod
{
if([self.delegate respondsToSelector:@selector(addItemViewController:)])
{
[self.delegate addItemViewController:mutableArray];
}
}