2012-03-09 87 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,而是一個NSDictionnary,直接指向節點「名稱」。

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

節目顯示:

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

一個想法?

感謝很多:)

回答

0

這是正常的 - 如果只有一個項目,就沒有必要在一個數組來包裝一個項目。您的處理程序只需要將[webservice valueForKey:@"item"]作爲id取出,然後檢查它是什麼類。如果它不是NSArray,只需將其包裝在一個之中,然後再繼續調用任何「過程」方法。

+0

非常感謝。它的工作:) – Royal 2012-03-09 14:52:21

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 2014-05-16 01:45:09