私はココアのObjective-cの初心者ですので、些細な質問をお許しください。
私は現在、NSJSONSerializationを介していくつかのデータをフェッチし、さらなる作業のために保存するXCODEプロジェクトに取り組んでいます。
このステップでは、データのフェッチの進行状況を、必要なパラメーター(フェッチ元のURLと配列に解析する必要のあるレイヤー)のセッターを持つクラスにカプセル化します。このプロシージャを使用するには、このクラス内にメソッドを作成します。このメソッドは、接続と要求を作成し、データを含む配列を返します。いくつかのテストの後、私はこのクラスのインスタンスを作成しようとし、データのフェッチを開始するメソッドを呼び出しました。
私の問題は、新しいインスタンス「block_stats」からメソッドdata_arrayを呼び出して、同じタイプの配列にデータを格納した後、配列が空になることです。
table_data = [block_stats data_array];
この動作の理由は、(didReceiveResponse、didReceiveData、connectionDidFinishLoading)のメソッドの使用が非同期で機能しており、ダウンロードが完了する前にdata_arrayの戻りが行われたためです。
ダウンロード部分を含むクラス内のメソッド:
- (NSMutableArray *)data_array
{
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
if(data_array)
{
[data_array removeAllObjects];
} else {
data_array = [[NSMutableArray alloc] init];
}
NSURLRequest *request = [NSURLRequest requestWithURL:data_url];
connection = [NSURLConnection connectionWithRequest:request delegate:self];
if(connection)
{
webdata = [[NSMutableData alloc]init];
}
return data_array;
}
インスタンスを作成し、メソッドを呼び出してデータをフェッチする別のビューのIBAction
- (IBAction)refresh:(UIBarButtonItem *)sender {
KDJSONparser *block_stats = [[KDJSONparser alloc]init];
[block_stats setURL:[NSURL URLWithString:@"*JSONDATA_URL*"]];
[block_stats setLayer:@"blocks"];
table_data = [block_stats data_array];
}
誰かアドバイスをいただければ幸いです。できるだけ理解しやすいといいですね。前もって感謝します!