iOS 앱 UI를 새로 고치는 방법에 문제가 있습니다. 데이터가되면 웹 서비스 (하지 메인 스레드) iOS의 다른 스레드에서 UI 구성 요소에 액세스
- 데이터 표시 : 내가 달성하고 싶어하는 것은 이것이다 검색된 데이터와 함께 UITableView의 내용을 새로 고칩니다.
- 잘못된 네트워크 연결에서 웹 서비스의 데이터를 수신하는 동안 UI가 멈추지 않거나 앱이 사용자 입력을 차단하지 않기 때문입니다
는이를 위해, 나는 다음과 같은 소스 코드를 만들 :
- (void)viewDidLoad
{
[super viewDidLoad];
NSURL *myURL = [[NSURL alloc] initWithString:[Constant webserviceURL]];
NSURLRequest *request = [NSURLRequest requestWithURL:myURL cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
[self myparser] = [[MyXMLParser alloc] initXMLParser];
[parser setDelegate:myparser];
BOOL success = [parser parse];
if (success) {
// show XML data to UITableView
[_tableView performSelectorOnMainThread:@selector(reloadData) withObject:[myparser xmldata] waitUntilDone:NO];
}
else {
NSLog(@"Error parsing XML from web service");
}
}
================== 내 구현이 맞습니까? 아무도 그것을 해결하는 방법을 알아?
안녕하세요, 응답 해 주셔서 감사합니다. 하지만 다른 스레드 (메인 스레드가 아닌)가 UITableView 객체에 액세스하여 UI 자체를 새로 고치는 방법을 알고 있습니까? – ekychandra
tableview에는 업데이트해야하는 인덱스 집합이 있으며 사용자가 화면에서 볼 수있는 인덱스를 해결해야 할 때 셀이 화면에서 벗어나거나 화면의 해당 셀에 대한 인덱스를 업데이트 할 때까지 기다려야합니다. [self performSelector : @selector (doReloadTableData) withObject : NULL afterDelay : 0.0];을 호출해야합니다. – Pareshkumar
또는 performSelector : onThread : withObject : waitUntilDone :을 사용하고 onThread : parm의 MainThread를 넘겨 줄 수 있습니다. 첫 번째 옵션은 다른 호출에서 랩핑해야하거나 데이터를 가져올 때 main에서 performSelection을 수행하는 것입니다. ------- 지금하고있는 것과 같습니다 : [_tableView performSelectorOnMainThread : @selector (reloadData) withObject : [myparser xmldata] waitUntilDone : NO]; – Pareshkumar