nat*_*iah 1 iphone sdk nsxmlparser
我究竟做错了什么?我不能让xmlparser停止解析.我设置了断点,[xmlParser abortParsing];然后运行.但是这之后的所有内容if(success)
都是我的代码:
-(void)viewDidLoad{
[NSThread detachNewThreadSelector:@selector(loadstuff)toTarget:self withObject:nil];
}
-(void)loadstuff{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
XMLParserdelegate *parserdeleagte = [[XMLParserdelegate alloc] init];
[xmlParser setDelegate:parserdelegate];
BOOL success = [xmlParser parse];
if(success){
NSLog(@"No Errors");
links = [[NSMutableArray alloc] initWithArray:links];
titles = [[NSMutableArray alloc] initWithArray:titles];
dates = [[NSMutableArray alloc] initWithArray:dates];
descriptions = [[NSMutableArray alloc] initWithArray:descriptions];
loading = FALSE;
[theTableView reloadData];
}else{
NSLog(@"Error parsing xml");
}
[pool release];
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[xmlParser abortParsing];
[xmlParser release];
xmlParser = nil;
}
Run Code Online (Sandbox Code Playgroud)
调用[parser abortParsing]肯定会停止解析器,但为什么你会期望它停止你的代码的其余部分 - 你所做的只是让行[parser parse];尽早结束 - 解析器仍然可以返回YES,因为它可能已成功解析 - 它没有'遇到错误,你要求它停止!
由于您的解析器处于单独的线程中,您必须告诉该线程您不再对解析器感兴趣(事实上,此时您将释放解析器,因此它可能不再存在).
您需要在对象中拥有另一个属性,您的线程将检查该属性
@property (assign) BOOL cancelThread; // deliberate lack of nonatomic here!
Run Code Online (Sandbox Code Playgroud)
在分离新线程之前将其设置为false:
- (void) viewDidLoad {
self.cancelThread = NO;
[NSThread detachNewThreadSelector:@selector(loadstuff)toTarget:self withObject:nil];
}
Run Code Online (Sandbox Code Playgroud)
然后,在您的viewWillDisappear方法中,将其设置为YES:
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.cancelThread = YES;
[xmlParser abortParsing];
[xmlParser release];
xmlParser = nil;
}
Run Code Online (Sandbox Code Playgroud)
最后,检查你的线程中的这个属性,看看你是否需要尽早结束ie
...
BOOL success = [xmlParser parse];
if (self.cancelThread) {
[pool release];
return;
}
if (success) {
NSLog(@"No Errors");
...
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助,
山姆