関数を変数として定義する JavaScript の機能が大好きで、Objective-C で同様のことをしようとしています。具体的には、オブジェクトに対して呼び出すことができる無名ブロックを使用して再帰関数を作成し、各ノードで変更を適用してツリーを通過できるようにしたいと考えています。
void ( ^setDetailsLoaded )( Product* ) = ^void ( Product* prod ) {
prod.detailsLoaded = true;
for ( Group* group in prod.groups ) {
for ( Product* mod in group.mods )
setDetailsLoaded( mod );
}
};
setDetailsLoaded( product ); <-- error here
しかし、プログラムを実行すると奇妙なエラーerror: address doesn't contain a section that points to a section in a object file
[sic] が表示されます (正常にコンパイルされます)。
おそらくブロックか何かを保持する必要があるのか 、それともブロックの代わりに関数ポインタでこれを行うべきなのか疑問に思っています。