0

我正在尝试使用静态库进行测试,并正在调用此方法(在静态库中)

-(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;

该 URL 处的 JSON 非常简单

{
"text" : "testing"
}

但是,每次调用它时,在委托方法didFinishParsing:中,日志记录dictionary都会返回(null)。我在这里做错了什么?是因为我从静态库中调用它吗?

4

2 回答 2

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]];

于 2013-04-03T00:36:32.510 回答
0

一旦该方法返回,“ json”内的“ ”就会自动释放/超出范围,因此它永远没有机会分配给您强大的“ ”属性。这就是您看到 NULL 的原因。parseJSONfromURLdictionary

尝试您的parseJSONfromURL方法中设置属性,看看是否有效,或者创建一个非自动发布的字典并返回

于 2013-04-02T04:50:34.127 回答