为啥我的 NSMutableArray 在 cellForRowAtIndexPath 中“半死”?
Posted
技术标签:
【中文标题】为啥我的 NSMutableArray 在 cellForRowAtIndexPath 中“半死”?【英文标题】:Why is my NSMutableArray "half dead" in cellForRowAtIndexPath?为什么我的 NSMutableArray 在 cellForRowAtIndexPath 中“半死”? 【发布时间】:2011-05-03 22:07:18 【问题描述】:在 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;
在调试器中,数组仅填充 1-9 而不是最多 19。10-19 包含奇怪的对象。什么可以吃我的阵列??
【问题讨论】:
您发布的代码看起来都不是问题的根源。当您使用第一种填充数组的方法时,会发生任何奇怪的事情。您只在按类填充时提到了一个问题。问题可能来自您分配、填充和释放 myInnehall.theMainList 的代码。 【参考方案1】:首先,您的 NSMutableArray 属性必须正确初始化,例如:
self.mainList = [[NSMutableArray alloc] init];
(不是NSArray
)
然后,您将您的属性mainList
指向myInnehall.theMainList
,然后您将其释放,这就是导致崩溃的原因。
尝试将myInnehall
项目添加到您的mainList
[self.mainList addObjectsFromArray:myInnehall.theMainList];
【讨论】:
PS:请不要复制您的对象...只需将现有项目添加到您的数组中,当然,除非您非常清楚 NSArray 如何实现 NSCopying 协议。【参考方案2】:尝试改变
self.mainList = myInnehall.theMainList;
到
self.mainList = [myInnehall.theMainList copy];
您也可以将NSLog([self.mainList description])
放入您的 cellForRowAtIndexPath 并发布结果吗?
PS:你在属性声明中有 NSMutableArray 并将其初始化为 NSArray?
【讨论】:
谢谢Kashiv,问题是通过复制而不是指向来解决的。以上是关于为啥我的 NSMutableArray 在 cellForRowAtIndexPath 中“半死”?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能在 iOS 中 RemoveAllObjects 的 NSMutableArray?