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)。为什么是这样?
你可以把相同的NSLog(@“%@”,re.keyVal);在performRequest之前:?我们来看看我们是否可以在那一刻看到数据。我的猜测是它将为空,并且keyVal ivar或getter存在问题。 – danh 2013-02-09 03:49:54
是啊,事实证明,在我的.h我有'(弱,非原子)'keyVal,所以导致它被释放之前,我可以使用它。我使用'(retain,nonatomic)来修复它' – 2013-02-09 04:06:28
这是一个字符串,它应该是'copy',而不是保留。如果它是一个非可变字符串,那么它将被优化为仅仅保留,但总是复制字符串,数组和字典是很重要的。此外,你应该回答你自己的问题,并将其标记为已解决。 ;) – Pascal 2013-02-09 04:09:21