2012-07-12 61 views
0

問題: 我不斷收到EXC_BAD_ACCESS。我打開NSZombieEnabled後,我看到這個[FeatureCommentListViewController respondsToSelector:]:消息發送到釋放實例0x7c1dc30在ARC下,使用ARC之後繼續獲取EXC_BAD_ACCESS,因爲使用了Block?

  1. 之前,我改變了我的項目的弧度,有沒有這樣的錯誤,但以後我改ARC,這出現錯誤。

  2. 我在塊中聲明一個ViewController並將其推入導航控制器。這個理由是否會縮短壽命?

    UIBlockButton是從this post

    UIBlockButton *lbGood3 = [[UIBlockButton alloc] initWithFrame:CGRectMake(0, 0, First_Button_Width, [self getGoodRow2Height:productDetail]) ]; 
    [lbGood3 handleControlEvent:UIControlEventTouchUpInside withBlock:^ { 
    NSLog(@"%@", Label.text); 
    
    ProductDetail *productDetail = [productDetailDict objectForKey:@"product"]; 
    NSString *dp_id = [NSString stringWithFormat:@"%@-%@",productDetail.url_crc,productDetail.site_id]; 
    
    
    FeatureCommentListViewController *cmtListController = [[FeatureCommentListViewController alloc] initWithNibName:@"FeatureCommentListViewController" bundle:nil]; 
    cmtListController.title = Label.text; 
    cmtListController.isReviewed=isReviewed; 
    cmtListController.productDetail=productDetail; 
    cmtListController.dp_id=dp_id; 
    cmtListController.feature_name = @"&feature_good_id=2"; 
    
    [self.navigationController pushViewController:cmtListController animated:YES]; 
    
    }]; 
    

我應該聲明的控制器作爲此的viewController的成員或只是聲明出塊的?

+0

你從哪裏得到了EXC_BAD_ACCESS? – 2012-07-12 14:58:54

+0

我想知道爲什麼推一個視圖控制器在一個塊,但不是在主線程?對觸摸動作做出快速響應不是很重要嗎? PS。如赫爾曼克萊克提到的,如果你從塊中聲明瞭vc,你可以在它之前添加__block。 – 2012-07-12 15:04:15

+0

你有堆棧跟蹤嗎? EXC_BAD_ACCESS是否發生在塊內或控制器被按下後?你的導航控制器在你推送時應該保留'cmtListController',ARC應該在'cmtListController'的最後一次訪問之後在塊尾添加'[cmtListController release]'。 – 2012-07-12 19:22:32

回答

0

我通過在viewDidLoad函數中分配FeatureCommentListViewController來解決此問題,並在塊中使用它。

-2

1st。林不知道爲什麼你推一個視圖控制器在一個塊,但不是在主線程?對觸摸動作做出快速響應不是很重要嗎?

2nd[self.navigationController pushViewController:cmtListController animated:YES];在您的區塊中。每當你離開目前navigationControllerself.navigationController代表什麼?

第3。如果您聲明viewController不在塊中,您可以在其前面添加__block,正如Hermann Klecker所述。

+1

所有這些都不相關 - 1)塊在主線程上執行(請參閱他的鏈接帖子),2)self是對當前視圖控制器的保留引用。在顯示此按鈕時,它如何具有不同的導航控制器?3)使用'__block'將允許他修改在塊外部定義的指針,但這不應該是必需的 - 他正在創建一個新的子控制器點擊一個按鈕。 – 2012-07-12 19:08:57

+0

@ChristopherPickslay感謝您的糾正。但是如果該塊在主線程上執行,爲什麼我們在這裏使用塊? – 2012-07-13 03:04:15

+0

我認爲他的'UIBlockButton'的意義在於你可以在原地定義按鈕的動作,而不是將它指向目標/動作。當你需要創建很多動態按鈕時,這非常棒。在他的情況下,他正在爲控制器配置特定於按鈕所在單元格的數據。目標/動作可能是這樣,但這需要一些體操。 – 2012-07-13 17:15:22

相關問題