Objective-c - XMLReader не работает правильно - PullRequest
1 голос
/ 09 марта 2012

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

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

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

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

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

Но когда у меня есть один предмет, он не работает. Я не NSarray of Item, но NSDictionnary с прямым именем узла "."

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

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

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

Идея?

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

Ответы [ 2 ]

1 голос
/ 23 августа 2012

попробуйте это

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 голосов
/ 09 марта 2012

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

...