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

whilejson が返されるため、ループは無限になると予想されます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 が出力されるかどうかを確認します。そうでない場合は、URL が間違っています。その場合、データは保持されていません。次のように json 変数をインスタンス化してみてください。

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

于 2013-04-03T00:36:32.510 に答える
0

" json" 内の " " は、そのメソッドが戻るとすぐに自動解放/範囲外になるため、強力な " " プロパティparseJSONfromURLに割り当てられる機会がありません。dictionaryそのため、NULL が表示されます。

メソッド内でプロパティを設定してみて、parseJSONfromURLそれが機能するかどうかを確認するか、自動解放されていない辞書を作成してそれを返します

于 2013-04-02T04:50:34.127 に答える