2012-03-09 1 views
1

У меня проблема с классом XMLReader (https://github.com/Insert-Witty-Name/XML-to-NSDictionary).Objective-c - XMLReader работает неправильно

Когда я разобрать этот документ, он работает отлично

<webservices> 
    <title>Photos</title> 
    <item> 
     <name>test</name> 
    </item> 
    <item> 
     <name>test2</name> 
    </item> 
</webservices> 

Дисплей программы:

webservices = { 
     item = (
        { 
        name= "test1."; 
        }, 
        { 
        name= "test2"; 
        } 
      ); 
     title = Photos; 
    }; 
} 

Но когда у меня есть один пункт, это не работает. Я не NSarray из Item, а NSDictionnary с директивой узла «name».

<webservices> 
    <title>Photos</title> 
    <item> 
     <name>test</name> 
    </item> 
</webservices> 

Программа дисплея:

webservices = { 
     item = { 
        name= "test"; 
        } 
     title = Photos; 
    }; 
} 

идея?

Большое спасибо :)

ответ

0

Это нормально - если есть только один элемент, нет необходимости, чтобы обернуть один элемент в массиве. Ваш обработчик просто должен получить [webservice valueForKey:@"item"] как id, а затем проверить, что это за класс. Если это не NSArray, просто оберните его в один, прежде чем переходить к тому методу, который вы вызываете.

+0

Большое спасибо. это работа :) – Royal

1

попробовать это

XMLReader.m 

+(NSArray*)enforceArray:(id)payload{ 
    if ([payload isKindOfClass:[NSArray class]]){ 
     return payload; 
    }else{ 
     if ([payload isKindOfClass:[NSNull class]] || isEmpty(payload)) return [NSArray array]; 
     return [NSArray arrayWithObject:payload]; 
    } 
} 



//common.h 
static inline BOOL isEmpty(id thing) { 
    return thing == nil 
    || [thing isKindOfClass:[NSNull class]] 
    || [thing respondsToSelector:@selector(isEqualToString)] 
     && [(NSString*)thing isEqualToString:@"(null)"] 
    || ([thing respondsToSelector:@selector(length)] 
     && [(NSData *)thing length] == 0) 
    || ([thing respondsToSelector:@selector(count)] 
     && [(NSArray *)thing count] == 0); 
} 


NSMutableArray *results = [[NSMutableArray arrayWithArray:[XMLReader enforceArray:[[xmlDictionary objectForKey:@"notifications"] objectForKey:@"notification"]]]; 

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

+0

попробуйте это вместо https://github.com/nicklockwood/XMLDictionary – johndpope

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