NSXMLParser를 통해 XML 데이터를 UITableView로로드하는 응용 프로그램이 있습니다. 이 모든 것이 완벽하게 작동했습니다. ActivityIndicator를 추가하기를 원했기 때문에로드 데이터를 다른 스레드에 배치 한 다음 메인에 배치해야합니다. 이 작업을 수행 한 후에도 XML은 내 응용 프로그램과 함께로드되지만 내 테이블에는 아무 것도 표시되지 않습니다. 내 tabbarcontroller의 다른 탭을 클릭 한 다음 테이블을 다시 클릭하면 테이블의 데이터가 표시됩니다. 무슨 일 이니?NSThread에서 XMLParser 오류
내 파일 :
이#import "DAFAppDelegate.h"
#import "RootViewController.h"
#import "XMLParser.h"
@implementation DAFAppDelegate
@synthesize window;
@synthesize navigationController;
@synthesize rootViewController;
@synthesize rootTabController;
@synthesize stages;
+ (void) showAlert
{
UIAlertView *av = [[[UIAlertView alloc] initWithTitle:@"No Connection" message:@"Could not retrieve data" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease];
[av show];
}
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
[window addSubview:[rootTabController view]];
[window makeKeyAndVisible];
[NSThread detachNewThreadSelector:@selector(parseXML) toTarget:self withObject:nil];
}
- (void) parseXML
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
NSURL *url = [[NSURL alloc] initWithString:@"http://web.me.com/ijar/Stages.xml"];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
//Initialize the delegate.
XMLParser *parser = [[XMLParser alloc] initXMLParser];
//Set delegate
[xmlParser setDelegate:parser];
//Start parsing the XML file.
BOOL success = [xmlParser parse];
if(success)
{
NSLog(@"No Errors");
}
else
{
[DAFAppDelegate showAlert];
NSLog(@"Error Error Error!!!");
}
[pool release];
}
- (void)dealloc
{
[navigationController release];
[rootViewController release];
[rootTabController release];
[window release];
[stages release];
[super dealloc];
}
@end
아니요이 reloadData 및 -performSelectorOnMainThread는 어디에 배치해야합니까? (SEL) aSelector withObject : (id) arg waitUntilDone : (BOOL) wait? 바보 같은 질문에 사과드립니다. 그러나 나는 이것에 초보자입니다. 책을 읽고 읽음으로써 배우기 시작. 모든 도움을 환영합니다 :-) – iJar
파서 성공 메시지 아래의 코드에 배치했습니다. 내 dataReload 메서드는 내 rootViewController에서 다음과 같이 보입니다. - (void) updateTable : (NSMutableArray *) data { \t appDelegate.stages = data; \t [self.tableView reloadData]; \t } 이제 내 컴파일러는 데이터가로드되는 순간 오류가 발생합니다. – iJar
그래서 오류가 무엇입니까? – David