2014-12-13 2 views
0

Во-первых, как я вижу, многие другие, кажется, объявляют, когда задают эти вопросы, я начинаю с Objective C. Я исходил из сильного фона PHP, поэтому я понимаю большинство концепций программирования , и изучали Obj C в течение последних 12 месяцев.Ошибка XMLReader Xcode

Один из моих первых проектов, чтобы мои ноги были мокрыми с iOS Objective C, заключался в интеграции с SOAP API Magento. Наверное, это не самая легкая вещь, но, тем не менее, это хороший вызов.

В настоящее время я пытаюсь интегрировать XMLReader (https://github.com/amarcadet/XMLReader). Но XCode продолжает бросать мне ошибку: ARC Семантический Проблема: Нет известный метод класса для выбора «dictionaryForNSXMLParser:»

который относится к следующему коду:

NSDictionary *dict = [XMLReader dictionaryForNSXMLParser:parser]; 

Я нашел несколько советов от другого вопроса: How can you use AFNetworking or STHTTPRequest to make a request of a SOAP web service?

Я вернул свой код, чтобы точно отразить примеры, приведенные в вопросе, поэтому я искал свой мозг, чтобы работать с этой ошибкой, но безрезультатно.

Любая помощь очень ценится, и я прошу прощения, если это что-то глупое, которое я упустил. Я попытался очистить Google для подобных проблем, но все они, похоже, приводят к методам класса, вызываемым на экземпляр, и т. Д.

+0

XMLReader не имеет метода открытого класса, называемого «dictionaryForNSXMLParser». – Roecrew

+0

Правильно. Но из другого вопроса, который я также упомянул, он добавляет метод public class для словаря FORNSXMLParser, а также добавляет метод 'objectWithNSXMLParser'. – scottw33

+0

«Метод класса» требует метода экземпляра + ... для экземпляра требуется. Вы точно это отразили? – stevesliva

ответ

1

Я пытался сам этот код всего минуту назад.

Вы должны добавить в XMLReader.h:

+(NSDictionary*)dictionaryForNSXMLParser:(NSXMLParser*)parser error:(NSError **)error; 

Тогда в XMLReader.m эти два:

+ (NSDictionary *)dictionaryForNSXMLParser:(NSXMLParser *)xmlParser error:(NSError **)error 
{ 
    XMLReader *reader = [[XMLReader alloc] initWithError:error]; 
    NSDictionary *rootDictionary = [reader objectWithNSXMLParser:xmlParser options:0]; 
    return rootDictionary; 
} 
- (NSDictionary *)objectWithNSXMLParser:(NSXMLParser *)xmlParser options:(XMLReaderOptions)options 
{ 
    // Clear out any old data 
    self.dictionaryStack = [[NSMutableArray alloc] init]; 
    self.textInProgress = [[NSMutableString alloc] init]; 

    // Initialize the stack with a fresh dictionary 
    [self.dictionaryStack addObject:[NSMutableDictionary dictionary]]; 

    [xmlParser setShouldProcessNamespaces:(options & XMLReaderOptionsProcessNamespaces)]; 
    [xmlParser setShouldReportNamespacePrefixes:(options & XMLReaderOptionsReportNamespacePrefixes)]; 
    [xmlParser setShouldResolveExternalEntities:(options & XMLReaderOptionsResolveExternalEntities)]; 

    xmlParser.delegate = self; 
    BOOL success = [xmlParser parse]; 

    // Return the stack's root dictionary on success 
    if (success) 
    { 
     NSDictionary *resultDict = [self.dictionaryStack objectAtIndex:0]; 
     return resultDict; 
    } 

    return nil; 
} 

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

[XMLReader dictionaryForNSXMLParser:parser error:nil]; 

Если он все еще не работает, попробуйте очистки проект с CMD + SHIFT + K и строить его снова.

+0

Добавление ошибки: nil' к методу сделал трюк! Спасибо огромное! – scottw33

Смежные вопросы