1

我在声明自己的代表时遇到问题。嗯......那不完全正确:我已经声明了它,当我构建项目时,编译器没有报告任何问题。我是这样声明的:

我制作了一个文件(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 文件中,我实现了 delegates 方法:

- (void)addItemViewController:(NSMutableArray *)ar {
   origen = ar; 
}

有人看出什么不对了吗?最后一个函数的代码永远不会执行。

谢谢你的帮助。

编辑:

我需要的是从 Vista2 更改 ViewController 中的数组(另一个视图控制器)

4

3 回答 3

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 对象中运行该代码。

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

于 2012-11-19T08:59:56.193 回答
0
  1. 你能说在什么条件下addItemViewController被调用?
  2. 您似乎走在正确的轨道上,但是您确定将代表设置为

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

于 2012-11-19T10:10:28.350 回答
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];
    }
}
于 2012-11-19T10:10:32.483 回答