2013-04-02 54 views
0

我想測試一下使用靜態庫,和我調用此方法(這是在靜態庫)iOS設備的靜態庫解析JSON返回null

-(NSMutableDictionary *)parseJSONfromURL:(NSURL *)url{ 
__strong NSMutableDictionary *json; 
[self.delegate isParsing:(url != nil)]; 
if (url == nil) { 
    [NSException raise:NSArgumentDomain format:@"The passed url argument cannot be nil"]; 
} 
NSError *err; 
json = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL:url] options:NSJSONReadingMutableLeaves error:&err]; 
if (err) { 
    [json setObject:err forKey:@"error"]; 
} 
while (json == nil) { 
    NSLog(@"waiting..."); 
} 
[self.delegate isParsing:NO]; 
[self.delegate didFinishParsing:(json != nil)]; 
return json; 
} 

我期望while循環中無限自json返回null,但代表方法didFinishParsing被髮送,這意味着它不是null。 像這樣(ACParser是在圖書館一類)

ACParser *p = [[ACParser alloc] initWithDelegate:self]; 
dictionary = [p parseJSONfromURL:[NSURL URLWithString:@"http://www.a-cstudios.com/text.json"]]; 

字典聲明如下

__strong NSMutableDictionary *dictionary; 

該網址JSON很簡單

{ 
"text" : "testing" 
} 

然而,每一次這稱爲代表方法didFinishParsing:,記錄dictionary返回(null)。我在這裏做錯了什麼?是因爲我從靜態庫調用它嗎?

+0

是不是有一個無限循環中的代碼,如果'JSON == nil'? – sapi

+0

這就是我期待的事情,這就是爲什麼我把它放在那裏,但它發回的東西,它只是不包含任何東西。 –

+0

好吧,它只會發送一個'bool'('didFinishParsing:'用布爾表達式調用,而不是json本身) – sapi

回答

2

嘗試添加此:

NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:url]] options:NSJSONReadingAllowFragments error:nil]);

在那裏,看看它打印出您期望的JSON。如果它沒有,你的網址是錯誤的。如果確實如此,那麼您的數據不會被保留。試試你的實例化JSON變量是這樣的:

NSMutableDictionary *json = [NSMutableDictionary dictionaryWithDictionary:[NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL:url] options:NSJSONReadingMutableLeaves error:&err]];

+0

第二次修復工作。謝謝。 –

0

json」內「parseJSONfromURL」是隻要該方法返回所以它從來沒有得到分配給您強烈的「dictionary」屬性機會自動釋放輸入/輸出範圍。 這就是爲什麼你看到NULL。

嘗試設置內您parseJSONfromURL方法財產,看看是否可行,或者創建一個非自動釋放字典,並返回

+0

我的意思是發送一個布爾 –

+0

你能澄清或詳細說明你最初的問題的最後兩句話嗎? –

+0

我不明白爲什麼'字典'是'(null)' –