2012-08-09 34 views
0

我有一個問題,我的區塊沒有捕獲和實例變量。下面是代碼:自我沒有被捕獲在區塊

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

我的塊被調用,但如果我嘗試訪問自我,或任何實例變量,應用程序崩潰。此外,我試圖特別呼籲__block和它的幫助。

除了數組(來自塊)和.block_descriptor之外,這些變量視圖中也沒有顯示變量。謝謝。

+3

viewController.block的屬性描述是什麼樣子的(即將它添加到問題描述中)。 – 2012-08-09 21:55:40

回答

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> 
+0

謝謝。問題是我沒有使用'dispatch_async' – 2012-08-10 14:58:49