2013-08-20 49 views
0

从AppDelegate我通过协议与MyViewController通信。所以,当调用此方法在AppDelegate.m:2通过协议ViewController之间的通信

- (void)thisMethodGetsCalled:(CustomData *)data { 
    //Do stuff 

    //Then call method via Protocol 
    [_exampleDelegate exampleMethod:data]; 
} 

它调用此方法MyViewController.m

- (void)thisMethodGetsCalledInsideViewController:(CustomData *)data { 
    //Do stuff with data 
} 


//ExampleDelegate.h 

#import <Foundation/Foundation.h> 

@protocol SMMessageDelegate <NSObject> 

- (void)thisMethodGetsCalledInsideViewController:(CustomData *)data; 

@end 

一切工作正常和预测“thisMethodGetsCalledInsideViewController”被“thisMethodGetsCalled”后调用。说MyViewController从未被实例化,那么“thisMethodGetsCalledInsideViewController”永远不会被调用。然而MyViewController实例化,后来与辞退:

[self dismissViewControllerAnimated:YES completion:nil]; 

我的应用程序崩溃时“thisMethodGetsCalled”之称。它试图调用“thisMethodGetsCalledInsideViewController”,但该方法驻留在MyViewController中,该方法被解散。有人知道如何解决这个问题吗?

+0

气味像它的ARC启用? –

+0

是。那是问题吗? –

回答

1

第一个想法: 某处您将MyViewController设置为它符合协议的对象的委托? 您必须要么:

  1. 设置委托值为零时MyViewController被驳回,或

  2. 设置委托属性为弱引用,即

@property (nonatomic,assign) id<TheProtocol> delegate;

希望有帮助。

+0

我的代理财产已经很弱,就像你的代码一样。 @property(nonatomic,assign)id _messageDelegate; 但设置委托值为零解决了它 –