Ios 使用我自己的代理

Ios 使用我自己的代理,ios,delegates,Ios,Delegates,我在陈述自己的代表时遇到问题。嗯……这并不完全正确:我声明了它,当我构建项目时,编译器不会报告任何问题。我是这样声明的: 我为声明协议制作了一个文件enviarDatos.h: @protocol enviarDatos <NSObject> - (void)addItemViewController:(NSMutableArray *)item; @end 有人看到什么不对劲吗?最后一个函数的代码永远不会执行 谢谢你的帮助 编辑: 我需要的是将ViewController

我在陈述自己的代表时遇到问题。嗯……这并不完全正确:我声明了它,当我构建项目时,编译器不会报告任何问题。我是这样声明的:

我为声明协议制作了一个文件enviarDatos.h:

@protocol enviarDatos <NSObject>
    - (void)addItemViewController:(NSMutableArray *)item;
@end
有人看到什么不对劲吗?最后一个函数的代码永远不会执行

谢谢你的帮助

编辑:


我需要的是将ViewController中的数组从Vista2更改为另一个ViewController

啊,看起来您在错误的位置声明了委托属性

您应该在envirardatos.h中声明属性委托

@property (nonatomic, weak) id <enviarDatos> delegate;
然后设置EnviarDatos对象并将Vista2对象指定为委托

现在,在EnviarDatos.m中,你可以运行

[self.delegate addItemViewController:someObjectArray];
这将在Vista2对象中运行该代码

委托用于回调创建它们的对象或其他一些对象。如果您创建了一个对象,然后想在其中运行一个方法,那么就不需要委托

您能说在什么条件下调用addItemViewController吗? 您似乎在正确的轨道上,但您确定将代理设置为

[yourObject setDelegate: self];
你试过调试它吗?如果在addItemViewController上设置断点,调试器是否会在那里暂停?您能否确认委托在方法中不为null?我可能会发布一些代码,但您的代码似乎是正确的,除了分配代表外,我想您应该检查一下


你犯了什么错误?你有什么问题?这些将帮助我们帮助您。那么,您是否调用过该方法?在vista2.h中,您必须添加delegate=self;然后实现委托方法,只有它会调用。谢谢你的解决方案,但我不能实例化委托。xCode告诉我它是错误的,您在哪里尝试实例化它。委托属性属于enviarDatos而不是Vista2。您需要确保它位于正确的位置。另外,我会将协议更改为避免混淆。我的意思是:正如你告诉我的,我在enviarDatos.h中创建了属性,但我无法在vista2.m中实例化它。我导入了文件1,我以为我在更改视图之前调用了它。2我无法实例化代表3我将检查它。对不起,我是这方面的新手。我想将数据发送到以前的视图。我知道如何将数据发送到下一个视图。现在我想用一个委托人告诉我哪一个是你的上一个视图和下一个视图。叫我白痴,但是我要怎么做才能从ChildViewController调用该方法?真的谢谢!!现在该方法正在执行。现在,我想,我理解了如何管理创建的协议:如果这个答案解决了您的问题,您应该接受这个答案。这样其他人就会知道你得到了这个问题的答案。
@property (nonatomic, weak) id <enviarDatos> delegate;
EnviarDatos *myObject = [[EnviarDatos alloc] init];
myObject.delegate = self;
[self.delegate addItemViewController:someObjectArray];
[yourObject setDelegate: self];
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];
    }
}