2014-08-28 68 views
-1

我有一个表格视图从哪里发送请求的数据从网址。我能够获取数据,但我想用委托将数据发送回表视图。代表为NULL

问题是,当我给你我的self.delegate它包含一个值,但是当我试图发回数据self.delegate变成000000。

在viewcontroller.m

GNRequestManager *request = [[GNRequestManager alloc]initWithDelegate:self]; 

在GNRequestManager.h

#import <Foundation/Foundation.h> 
#import "GNDownloadManager.h" 

@protocol RequestManagerDelegate <NSObject> 

- (void)didReceiveData:(NSMutableArray *)data; 

@end 


@interface GNRequestManager : NSObject 

@property (nonatomic, weak) id<RequestManagerDelegate> delegate; 

-(id)initWithDelegate:(id<RequestManagerDelegate>)inDelegate; 

- (void)requestWithURL:(NSString *)urlString; 

-(void)didReceiveResponse:(NSMutableArray *)downloadData; 



@end 

在GNRequestManager.m

-(id)initWithDelegate:(id<RequestManagerDelegate>)inDelegate 
{ 
    self = [super init]; 

    if (self) 
    { 
     self.delegate = inDelegate; // **self.delegate has a value** 

    } 

    return self; 
} 



- (void)didReceiveResponse:(NSMutableArray *)downloadData // Fetch the data in downloadData 

{ 

    if(!itemArray) 
    { 
     itemArray = [[NSMutableArray alloc]init]; 
    } 

    itemArray = downloadData; 

    [self.delegate didReceiveData:itemArray]; // **self.delegate does not contain any value** 

} 
+0

可能是GNRequestManager *请求被释放,如果它不被保留。 – 2014-08-28 08:35:37

+0

“委托”声明在哪里? – YogevSitton 2014-08-28 08:50:47

+0

为您的经理添加界面。我认为委托是弱的(应该是),并且你的VC被释放了。 – 2014-08-28 08:51:26

回答

1

我曾经有过这个问题。据我所知,您将delegate作为weak修饰符的属性进行存储。这意味着您的GNRequestManager不会增加您的委托对象的引用计数。 如果要创建委托对象,如:

GNDelegateObject *delegate = [GNDelegateObject new]; 
GNRequestManager *manager = [[GNRequestManager alloc] initWithDelegate:delegate]; 

委托对象将被释放。

您应该在其他地方(不在GNRequestManager中)强烈引用您的委托对象。

UPD:你已经更新的问题,该委托设置,如:

GNRequestManager *request = [[GNRequestManager alloc]initWithDelegate:self]; 

其中selfUIViewController子类的实例。

此视图控制器仍然在视图控制器层次结构中吗?也许,你已经解散/弹出它,以便它现在被释放?

+0

重点强调“别的地方”。强烈提及代表的对象通常会导致保留周期。如果所有这些都没有意义,请阅读Apple的文档。 – gnasher729 2014-08-28 08:46:17

+0

@ gnasher729“其他地方”意味着GNRequestManager之外。编辑答案,谢谢。 – 2014-08-28 08:49:35

+0

我同意@Nikita。很显然,'inDelegate'正在被释放并被剔除,因为'delegate'支持。弱。 – kelin 2014-08-28 09:19:39