Objective-Cで^blocksを使用するといくつかの問題が発生しました。ブロック内からインスタンス変数を設定しようとしています-このトピックに関するいくつかのAppleのドキュメントを読みましたが、すべてを試したと感じています。
@interface MyClass
{
// I have tried all possible combinations using __weak, __strong and __block.
__weak __block NSMutableArray *filenames;
}
// *.m
static ASIFormDataRequest *g_request = nil;
@implementation MyClass
-(void) funnymethod
{
filenames = [NSMutableArray array];
[filenames addObject:@"This is a string."];
NSLog(@"%@", filenames);
g_request = [InitializerClass initializeRequest];
[g_request setCompletionBlock:^
{
filenames = [NSMutableArray array];
[filenames addObject:@"This is another string."];
NSLog(@"%@", filenames);
}];
[g_object startASynchronous];
}
@end
上記のコードは次の出力を提供します:("これは文字列です。")(null)
それは最悪だ。だから、私は__weak、__ strong、__ blockのさまざまな組み合わせを試しましたが、それ以外の場合は次の出力が得られます:( "これは文字列です。")( "これは別の文字列です。")しかし!大規模ですが。完了ブロックが終了することはありません。接続が開いていることを示すトップバーのアクティビティインジケータが回転し続け、画面が応答しなくなります。
ブロック内からfilenames-objectを正常に設定するにはどうすればよいですか?前もって感謝します。