使用我自己的代表

时间:2012-11-19 08:50:55

标签: ios delegates

我在声明自己的委托时遇到了问题。嗯......这不完全正确:我已经声明了,当我构建项目时,编译器报告没有问题。我用这种方式声明了它:

我创建了一个文件(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中的数组

3 个答案:

答案 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)

  1. 你能说出调用addItemViewController的条件吗?
  2. 您似乎走在正确的轨道上,但是您确定要将委托设置为

    [yourObject setDelegate: self];
    
  3. 您是否尝试过调试?如果在那里设置断点,调试器是否会在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];
    }
}