我正在编写一个正在从Web上的XML-Doc解析数据的应用程序。因此,当它完成加载时,它应该调用解析方法如下。
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
[self startParsingData];
}
这应该在理论上有效,对吧?问题是我收到了这个错误:
接收器类型'ffwDetailViewController'实例消息未声明带有选择器'startParsing Data'的方法
我认为,xCode认为这种方法不存在。但它确实存在。
-(void)startParsingData{
NSXMLParser *dataParser = [[NSXMLParser alloc] initWithData:recievedData];
dataParser.delegate = self;
[dataParser parse];
}
我不知道该怎么办。我真的很感激任何帮助。
切换他们的位置就行了。不幸的是,现在应用程序在按下按钮时崩溃了。这是完整的代码。我希望你能帮助我。
- (IBAction)getMissions:(id)sender {
if (recievedData) {
recievedData = nil;
}
_einsaetze.text=@"Pasing Data...";
NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://oliverengelhardt.de/ffw_app/test.xml"]]
cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
//Start loading Data
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
recievedData = [NSMutableData data];
}else{
[_einsaetze setText:@"connection failed"];
}
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
[recievedData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
if (recievedData) {
[recievedData appendData:data];
}
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
_einsaetze.text=@"connnection failed";
}
-(void)startParsingData{
NSXMLParser *dataParser = [[NSXMLParser alloc] initWithData:recievedData];
dataParser.delegate = self;
[dataParser parse];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
[self startParsingData];
}
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
if ([elementName isEqualToString:@"element"]) {
NSString *myData = [NSString stringWithFormat:@"%@", [attributeDict objectForKey:@"myData"]];
_einsaetze.text = myData;
}
}
答案 0 :(得分:3)
如果未在类的-(void)startParsingData
部分声明@interface
(在.h文件中或.m文件的扩展名中),那么-(void)startParsingData
需要在物理上之前.m文件中的-(void)connectionDidFinishLoading
。
.m文件中的顺序是什么?