2013-02-09 102 views
0

我在這裏解析xml,想知道爲什麼這不起作用。在我的請求對象,我做這個iOS不更新標籤文本

- (Request *)performRequest{ 
NSError *error; 
CXMLDocument *parser = [[CXMLDocument alloc]initWithContentsOfURL:[NSURL URLWithString:@"http://production.shippingapis.com/ShippingAPITest.dll?API=TrackV2&XML=%3CTrackRequest%20USERID=%22827ACSTU1155%22%3E%3CTrackID%20ID=%22EJ958088694US%22%3E%3C/TrackID%3E%3C/TrackRequest%3E"] options:0 error:&error]; 
if (error) { 
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Error" message:@"An error has occured. Try again." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
    [alert show]; 
} 
NSArray *arr = [parser nodesForXPath:@"//TrackResponse/TrackInfo/TrackSummary" error:nil]; 
self.keyVal = [arr objectAtIndex:0]; 
NSLog(@"%@", keyVal); 

return self; 
} 

的NSLog的是顯示

<CXMLElement 0x2005c7c0 [0x2005cfb0] TrackSummary <TrackSummary>Your item was delivered at 1:39 pm on June 1 in WOBURN MA 01815.</TrackSummary>> 

這是我的期望。但是,在我的視圖控制器中,我這樣做。

- (void)viewDidLoad{ 
Request *re = [[Request alloc]init]; 
[re performRequest]; 
[self performSelectorOnMainThread:@selector(updateUI:) withObject:re waitUntilDone:NO]; 
} 

- (void)updateUI:(Request *)re{ 
self.info1.text = re.keyVal; 
NSLog(@"%@", re.keyVal); 
} 

但是,標籤(info1)和日誌顯示(null)。爲什麼是這樣?

+0

你可以把相同的NSLog(@「%@」,re.keyVal);在performRequest之前:?我們來看看我們是否可以在那一刻看到數據。我的猜測是它將爲空,並且keyVal ivar或getter存在問題。 – danh 2013-02-09 03:49:54

+0

是啊,事實證明,在我的.h我有'(弱,非原子)'keyVal,所以導致它被釋放之前,我可以使用它。我使用'(retain,nonatomic)來修復它' – 2013-02-09 04:06:28

+0

這是一個字符串,它應該是'copy',而不是保留。如果它是一個非可變字符串,那麼它將被優化爲僅僅保留,但總是複製字符串,數組和字典是很重要的。此外,你應該回答你自己的問題,並將其標記爲已解決。 ;) – Pascal 2013-02-09 04:09:21

回答

0

我解決了這個問題對我自己通過聲明標頭中的財產

(nonatomic, retain)