1
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_async(queue, ^{
            NSError *error = nil;

            NSURL *urlRequest = [NSURL URLWithString:[NSString stringWithFormat:@"...", URL]];
            NSString *json = [NSString stringWithContentsOfURL:urlRequest
                                        encoding:NSASCIIStringEncoding
                                        error:&error];

            JKParseOptionFlags options = JKParseOptionStrict;
            NSDictionary *results = [json objectFromJSONStringWithParseOptions:options];

            NSString *body = [[results objectForKey:@"item"] objectForKey:@"description"];

            Article *article = [[Article alloc] initWithTitle:title URL:URL body:body];
            [self.articles insertObject:article atIndex:0];
        });

そのすぐ外にありますが、その直後[self.tableView reloadData];に呼び出すと0が返されます.なぜ追加しないのですか? NSLog(@"%d", self.articles.count);記事の body プロパティにアクセスするそのブロック内で NSLog を呼び出すと、それが出力されるため、オブジェクトは一見問題なく作成されます。はい、これが含まれているメソッドは呼び出されます (viewDidLoad によって)。

4

2 に答える 2

3

本体は非同期で実行されるため、関数が完了してからしばらくすると、その本体の実行が開始されません。したがって、コードをキューに入れ (後で実行されるまで実行されません)、記事がリストに追加されたかどうかを確認します (追加されるのは後で実行されます)。

コードの内部をチェックすると、キューがコードの実行を完了すると、しばらくして実際にチェックされます...

于 2013-03-23T21:01:21.787 に答える
0

オブジェクトの宣言を見ずしてこれ以上のことは言えませんarticlesが、これは通常、NSMutableArray使用しようとしているオブジェクトが nil であることを意味します。記事の body プロパティをログに記録すると同時に、articlesオブジェクトもログに記録してみてください。配列を次のように宣言した場合

NSMutableArray *articles;

それでは機能しません - 記事はまだ nil であり、オブジェクトを受け入れることができません。次のいずれかのオプションを使用して宣言/インスタンス化します。

NSMutableArray *articles = [NSMutableArray array];

また

NSMutableArray *articles = [[NSMutableArray alloc] init];
于 2013-03-23T20:59:16.397 に答える