2013-04-02 31 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)' –