0

ブロックがキャプチャされておらず、その周りのインスタンス変数がないという問題があります。コードは次のとおりです。

__block NSArray *oldArray = self.savedArray;
viewController.block = ^(NSArray *array) {
    NSLog(@"array: %@", array);
    NSLog(@"oldArray: %@", oldArray); // CRASH
    NSLog(@"self: %@", self); // CRASH
};

ブロックが呼び出されていますが、selfまたはインスタンス変数にアクセスしようとすると、アプリがクラッシュします。また、私は具体的に電話をかけようとし__blockましたが、助けにはなりませんでした。

これらは、array(ブロックから取得)と.block_descriptor以外に、変数ビューに表示される変数もありません。ありがとう。

4

1 に答える 1

2

それはあなたのプロパティ定義でなければなりません。私はあなたが持っているコードをコーディングしてダンプしました:

@property (strong, nonatomic) void (^b)(NSArray *a);
@property (strong, nonatomic) NSArray *array;
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    array = @[ @"1", @"2", @"3" ];

    __block NSArray *oldArray = array;
    b = ^void(NSArray *a) {
                NSLog(@"array: %@", a);
                NSLog(@"oldArray: %@", oldArray); // CRASH
                NSLog(@"self: %@", self); // CRASH
            };

    dispatch_async(dispatch_get_main_queue(), ^{ b(oldArray);}  );
}
2012-08-09 18:18:04.259 Searcher[49816:f803] array: (
    1,
    2,
    3
)
2012-08-09 18:18:04.260 Searcher[49816:f803] oldArray: (
    1,
    2,
    3
)
2012-08-09 18:18:04.261 Searcher[49816:f803] self: <ViewController: 0x6884550>
于 2012-08-09T22:45:27.447 に答える