2012-02-26 65 views
0

我是iOS開發人員的新手,我無法找出內存問題。如何才能在UITableViewController中釋放實例變量

我使用UITableViewController的viewDidLoad方法中的數據加載了一個數組。這裏的代碼是

- (void)viewDidLoad 
{ 
[super viewDidLoad];  
// Get Data 
PANewsListModel *info = [PADataSource getNewsList]; 
_data = [info.news]; 

NSLog(((PANewsModel *)[_data objectAtIndex:1]).title); 

UIImageView *bkgrd = [[UIImageView alloc]initWithImage:[UIImage imageNamed:BACKGROUND_IMAGE]]; 
self.tableView.backgroundView = bkgrd; 
self.tableView.rowHeight = 100; 
} 

在NSLog調用中可以訪問數據。

但是在填充TableCells的方法中,它給出了內存異常。這裏是代碼

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    NSLog(@"tableView"); 
    static NSString *CellIdentifier = @"NewsCellID"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     [[NSBundle mainBundle] loadNibNamed:@"PANewsCellIB" owner:self options:nil]; 
     cell = tableCell; 
     self.tableCell = nil; 

     PANewsModel *newsItem = (PANewsModel *) [self.data objectAtIndex:1]; 

     UILabel *title = (UILabel *)[cell viewWithTag:101]; 
     title.text = newsItem.title; // This instruction gives EXC_BAD_ACCESS 

    } 

    [cell sizeToFit]; 
    return cell; 
} 

什麼可以使一個實例變量釋放這些方法之間?

更新:更多信息

這是數據

.h 
@property (nonatomic, retain) NSMutableArray *data; 
.m 
@synthesize data = _data; 

的聲明和PANewsModel類

@interface PANewsModel : NSObject 

@property (nonatomic, retain) NSString *title; 
@property (nonatomic, retain) NSString *shortDescription; 
@property (nonatomic, retain) NSString *description; 
@property (nonatomic, retain) NSDate *date; 
@property (nonatomic, retain) UIImage *photo; 

-(id) initWithTitle: (NSString *) t 
      shortDesc: (NSString *) s 
     description: (NSString *) d 
       date: (NSString *) date 
       image: (UIImage *)image; 

@end 
+0

如何聲明'_data'和'self.data'? – sch 2012-02-26 20:10:54

+2

'_data = [info.news];'語法無效。這是一個錯字嗎? – 2012-02-26 20:15:27

+0

'cell = tableCell; self.tableCell = nil;'就在這裏,它看起來像你將一個對象放在一個ivar中指向另一個指針,然後通過setter去掉剛分配的對象。什麼是'tableCell'? – 2012-02-26 20:15:56

回答

0

很難通過你發佈的代碼只是告訴,但您可能需要在viewDidLoad中保留_data對象。試試這個:

PANewsListModel *info = [PADataSource getNewsList]; 
_data = [info.news retain]; 

並確保將其發佈到您的dealloc方法中。

+0

或者他可以使用setter,而不是類型retain:'self.data = ???' – sch 2012-02-26 20:19:03

+0

是的,他可以。但他沒有發佈標題,所以無論哪種方式,這將工作。 – edc1591 2012-02-26 20:21:13

+0

我嘗試了你的激光器,但它沒有工作,我用更多的信息更新了問題,也許我的錯誤在那裏。 – 2012-02-26 21:21:36

相關問題