TableView崩溃了

时间:2010-07-16 12:12:10

标签: iphone objective-c uitableview

由于某种原因,这个UITableView不断崩溃,似乎UITableView由于某种原因无法显示secondsString但我不明白为什么......请帮助我在这里因为我不知道我可能做错了什么.....谢谢!

#import "SettingsView.h"

@implementation SettingsView

- (void)viewWillAppear:(BOOL)animated {

   [super viewWillAppear:animated];
   transmissionSetup = [[TransmissionSetupViewController alloc]     initWithNibName:@"TransmissionSetupViewController" bundle:nil];
   transmissionSetup.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
   NSLog(@"%i", [self getMinutes]);
   [self setSeconds:10];
   secondsString = [NSString stringWithFormat:@"%i", [self getSeconds]]; 
   [self.tableView reloadData];
}

 #pragma mark Table view methods

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

   static NSString *CellIdentifier = @"Cell";

   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
    }

   if (indexPath.section == 0) {
       cell.textLabel.text =  @"Every:";
       cell.detailTextLabel.text = secondsString;
    }
    // Set up the cell...

    return cell;
}

@end

2 个答案:

答案 0 :(得分:1)

使用自动释放的字符串初始化secondString - 因此无法保证它在当前范围之外有效。您需要在初始化时保留它(并且不要忘记稍后发布)

我建议你看一下objective-c properties来访问ivars。

答案 1 :(得分:0)

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

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}

if (indexPath.section == 0) {
    cell.textLabel.text =  @"Every:";
    cell.detailTextLabel.text = secondsString;
}
// Set up the cell...

return cell;
}