可以說我有一個UITextField
,其中用戶可以輸入一個URL,例如:現在
http://foo.bar/foo/bar.asmx
,如果應用程序被供給右URL,它將與一個NSData
具有大約450 bytesize響應-700取決於返回值,這些值在用戶之間有所不同。通話需要大約一秒左右的時間,並且NSXMLParser
也在一秒鐘內解析數據。
但每當我們在輸入例:
http://apple.com/foo/bar.asmx
我們收到的NSData
有大約9700一bytesize而且,解析器通過無限解析這個數據。而且我不知道如何在用戶輸入無效網址時導致NSXMLParser
解析爲無窮大時拋出正確的錯誤消息。
我們試過用這個。
在-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
xmlParser = [[NSXMLParser alloc] initWithData:myData];
[xmlParser setDelegate:self];
[xmlParser shouldResolveExternalEntities:YES];
[xmlParser parse];
[self performSelector:@selector(timeOutMyParser:) withObject:nil afterdelay:15];
[xmlParser release];
[connection release];
[myData release];
}
現在
,什麼與此代碼恰好是永遠不會執行performSelector因爲它的運行下去解析。
所以總結:
爲了減少錯誤我們的用戶可以創建的數量,我們需要如果他們採取長期停止我們當前的NSXMLParser解析器的操作。
是否有任何EASY方式取消當前的解析操作?
由於解析器在主線程上解析,並且主線程被解析阻塞,所以選擇器永遠不會被觸發。我所做的是將解析放在NSOperation中,將NSOperation放在NSOperationQueue上,這將使其成爲一個線程應用程序。然後你可以從線程或解析器委託方法本身調用abortParsing。 – krzyspmac 2011-06-14 08:21:00
嗯好吧,你有任何資源或例子,我可能會停止線程,如果解析操作需要很長時間? – doge 2011-06-14 08:24:15