2014-08-28 21 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