在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包含奇怪的对象。什么可以吃我的数组??
答案 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?