彼はそこにいます、私はファイルとフォルダを持つ単純なツリー構造を持っています. これは、仮想フォルダをダウンロードできるクライアント サーバー アプリケーションの一部です。とにかく、非同期プログラミングに ^blocks を使用するのが好きです。私は3つのURLを持っています.1つ目はフォルダの説明をダウンロードし、2つ目はファイルをダウンロードするためのもので、3つ目はフォルダの内容をダウンロードするためのものです. DSFolder はフォルダの説明であり、DSFile は DSFolder から継承し、ダウンロード結果の NSData フィールドを含みます。フォルダーのダウンロード コードは次のようになります。
- (void)loadFolderData:(DSFolder *)folder
finished:(void(^)(DSFolder *))finished
error:(void(^)(NSError *))error {
if (!folder) {
return;
}
for (DSFolder* fileOrFolder in folder.children) {
if ([fileOrFolder isFolder]) {
[self loadFolderData:fileOrFolder
finished:^(DSFolder * folder) {
// *********************************
// Next folder level would be a copy
// of the whole for loop in here
// *********************************
} error:^(NSError * err) {
if (error) {
error(err);
}
}];
} else {
[self loadFile:fileOrFolder.name
folder:folder.name
finished:^(NSData * data) {
((DSFile *) fileOrFolder).data = data;
} error:^(NSError * err) {
if (error) {
error(err);
}
}];
}
}
}
ループを数回コピーするだけでツリーレベルの深さを制限できますが、それは非常に醜いようです。この質問が妥当であることを願っています。