为什么我的NSMutableArray在cellForRowAtIndexPath中“半死”?

时间:2011-05-03 22:07:19

标签: iphone objective-c ios uitableview nsmutablearray

在rootViewController.h中我有一个属性NSMutableArray mainList:

@interface RootViewController : UITableViewController {    
    NSMutableArray *mainList;
}
@property (nonatomic, retain) NSMutableArray *mainList;
@property (nonatomic, retain) IBOutlet DetailsViewController *detailsController;

在m文件中,加载时,以下工作正常:

- (void)viewDidLoad
{
self.mainList = [[NSArray alloc] initWithObjects:@"Country1", @"Contry2", nil];
}

通过类填充数组也可以正常工作(首次加载时):

innehall *myInnehall= [[innehall alloc] init];
[myInnehall fillMain];
self.mainList = myInnehall.theMainList;
[myInnehall release];

(调试器显示数组中的数据正确)

滚动时,应用程序会在设置单元格标签时崩溃:

- (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.textLabel.text = [self.mainList objectAtIndex: [indexPath row]];
return cell;
}

在调试器中,Array仅填充1-9而不是最多19. 10-19包含奇怪的对象。什么可以吃我的数组??

2 个答案:

答案 0 :(得分:2)

首先,必须正确初始化NSMutableArray属性,如:

self.mainList = [[NSMutableArray alloc] init];

(不是NSArray

然后,您将属性mainList指向myInnehall.theMainList,之后您将释放它,这就是导致崩溃的原因。

尝试将myInnehall项添加到mainList

[self.mainList addObjectsFromArray:myInnehall.theMainList];

答案 1 :(得分:0)

尝试更改

self.mainList = myInnehall.theMainList;

self.mainList = [myInnehall.theMainList copy];

您是否也可以将NSLog([self.mainList description])放入您的cellForRowAtIndexPath并发布结果?


PS:您在属性声明中有NSMutableArray,并将其初始化为NSArray?