2012-07-30 96 views
0

在這個函數中,我通過一個名爲AFKissXMLRequestOperation的kiss xml函數獲得xml。但是因爲它是無效的,所以我不能訪問XMLDocument,除非我使用NSLog,但是當我需要訪問XML時這沒有用。所以,我嘗試將它設置爲自我的變量,以便在其他函數中訪問它。如果我在NSLog self.xmlDocument塊內部,它的工作原理。但是,當我NSLog它在調用NSLog(@「self!%@」,[self.xmlDocument XMLStringWithOptions:DDXMLNodePrettyPrint])中的塊之外時,它是NULL。那麼如何訪問self.XMLDocument?無法訪問自我?

-(id)xmlRequest:(NSString *)xmlurl 
{ 
AFKissXMLRequestOperation* operation= [AFKissXMLRequestOperation XMLDocumentRequestOperationWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:xmlurl]] success:^(NSURLRequest *request, NSHTTPURLResponse *response, DDXMLDocument *XMLDocument) { 
    NSLog(@"kiss operation %@", [XMLDocument XMLStringWithOptions:DDXMLNodePrettyPrint]); 
    self.xmlDocument=XMLDocument; 

} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, DDXMLDocument *XMLDocument) { 
    NSLog(@"Failure!"); 
}]; 

[operation start]; 
NSLog(@"self!%@", [self.xmlDocument XMLStringWithOptions:DDXMLNodePrettyPrint]); 
return self.xmlDocument; 
} 
+0

你在哪裏登錄? – 2012-07-30 15:36:53

回答

1

NSURLRequest執行asynchroneously,所以你將不得不審查無論你的代碼的組織方式,或者使用synchroneous網絡操作。

在上面的代碼中的錯誤是,由於NSURLRequest執行asynchroneously,所述

NSLog(@"self!%@", [self.xmlDocument XMLStringWithOptions:DDXMLNodePrettyPrint]); 
return self.xmlDocument; 

進行之前operation已完成,因而返回nil

您是否真的需要退貨xmlDocument?我不這麼認爲,因爲你把它當作財產。我的猜測是,在成功塊中,(你設置self.xmlDocument=XMLDocument;),你可以實際處理xmlDocument,或者調用這樣做的方法。

希望幫助

0

我相信AFKissXMLRequestOperation是一個異步操作,所以你應該做你需要成功的塊內的反應做什麼。如果您希望將響應處理分開,則成功塊當然可以調用另一個函數。如果你需要傳遞響應返回給另一個類,你可以建立自己的委託協議/屬性或自己使用塊做到這一點:

委託協議:

@protocol XMLResponseHandlerDelegate <NSObject> 

- (void)handleResponseXML:(XMLDocument *)xmlDoc; 

@end 

然後調用它:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:xmlurl]]; 
AFKissXMLRequestOperation* operation= [AFKissXMLRequestOperation XMLDocumentRequestOperationWithRequest:request 
success:^(NSURLRequest *request, NSHTTPURLResponse *response, DDXMLDocument *xmlDocument)  
{ 
    NSLog(@"kiss operation %@", [XMLDocument XMLStringWithOptions:DDXMLNodePrettyPrint]); 
    [self.delegate handleResponseXML:xmlDocument]; 
} 
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, DDXMLDocument *XMLDocument) 
{ 
    NSLog(@"Failure!"); 
}];