вызов метода с использованием self приводит к ошибке - PullRequest
1 голос
/ 21 марта 2012

Я пишу приложение, которое анализирует данные из XML-документа в Интернете. Поэтому, когда он заканчивает загрузку, он должен вызывать метод синтаксического анализа следующим образом.

-(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;
}

}

1 Ответ

3 голосов
/ 21 марта 2012

Если -(void)startParsingData не объявлено в разделе @interface класса (либо в .h, либо в расширении в файле .m), то -(void)startParsingData должно быть физически перед -(void)connectionDidFinishLoading в. м файл.

В каком порядке они находятся в вашем файле .m?

...