ios - 使用self调用方法会导致错误

标签 ios xml xcode parsing self

我正在编写一个可从网络上的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;
}

}

最佳答案

如果未在类的-(void)startParsingData部分(在.h或.m文件的扩展名中)声明@interface,则-(void)startParsingData在物理上应位于.m文件中的-(void)connectionDidFinishLoading之前。

它们在您的.m文件中是什么顺序?

关于ios - 使用self调用方法会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9809536/

相关文章:

ios - 来自 Storyboard 的 View 不会出现在 Xcode Preview 中

c++ - xCode 和 C++ 数组。这怎么可能?在 C++ 中声明一个没有大小的数组

arrays - 如何匹配两个数组中相同的牌

iphone - 我想在同一 View Controller 中同时使用选项卡栏和导航栏

ios - VNRectangleObservation 角在 iPhone 上压缩在 x 轴上

java - Spring MVC - 接收 XML 对象并反序列化为 Collection

javascript - 匹配除尖括号之外的单词边界

ios - CocoaLumberjack 1.9.x 遗留宏启用 + DDLogWarn 宏重新定义

ios - Objective C 代码中的导出和 Action 存储在哪里?

javascript - 我可以使用 JavaScript 生成 RSS (XML) 页面吗?