2011-03-20 42 views
0

的Xcode 4告訴我,它崩潰的這行代碼:view.delegate = self;EGOTableViewPullRefresh崩潰

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.navigationController.navigationBar.barStyle = UIBarStyleBlack; 
    self.title = @"Blog"; 

    if (_refreshHeaderView == nil) { 

     EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderView alloc] initWithFrame:CGRectMake(0.0f, 0.0f - self.tableView.bounds.size.height, self.view.frame.size.width, self.tableView.bounds.size.height)]; 
     view.delegate = self; 
     [self.tableView addSubview:view]; 
     _refreshHeaderView = view; 
     [view release]; 
    } 
    [_refreshHeaderView refreshLastUpdatedDate]; 
} 

你有爲什麼它崩潰什麼想法?

回答

0

你過度釋放視圖。您初始化view,然後將其分配給_refreshHeaderView,然後立即發佈view

當你這樣做:

_refreshHeaderView = view;

......你告訴_refreshHeaderView爲指向view對應的存儲位置。 view的保留計數爲1,因爲你已經alloc/init'd它。然後在下一行你釋放view,這意味着它的保留計數是0,所以對象不再存在(我在這裏簡化:你也將它作爲子視圖添加,這會增加保留計數。你不需要在這裏發佈它)。

這也意味着_refreshHeaderView不再存在,因爲view和_refreshHeadView都是相同的對象。因此,當您撥打refreshLastUpdatedDate時,您將遇到訪問不便,崩潰的情況。

擺脫[view release]應該可以避免崩潰,但是您應該非常小心,以確保稍後在完成該對象時釋放該對象(推測可能在您的dealloc方法中)。建議refreshHeaderView屬於這個幫助。

+0

即使我刪除該行仍然沒有崩潰[查看發佈] :( – user535351 2011-03-20 14:08:17