我的NSMutableArray不存储任何对象,无论是String还是复杂类。我试着将ind init和init分配为数组。两者都没有成功。
.m文件:
@interface WorkCentersViewController()
@property (nonatomic, retain) NSMutableArray *selectedWorkCenters;
@end
@implementation WorkCentersViewController
@synthesize selectedWorkCenters;
-(id)init{
self = [super init];
if(self){
//self.selectedWorkCenters = [[NSMutableArray alloc] init]; //doesn't work too
self.selectedWorkCenters = [NSMutableArray array];
}
return self;
}
- (void)dealloc
{
[selectedWorkCenters release];
[super dealloc];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if(cell.accessoryType == UITableViewCellAccessoryCheckmark){
...
}else{
//select
cell.accessoryType = UITableViewCellAccessoryCheckmark;
//add
[self.selectedWorkCenters addObject:[self.workCenters objectAtIndex:indexPath.row]];
NSLog(@"Sel WC Count: %d", [self.selectedWorkCenters count]); //always 0
}
}
为什么不存储WorkCenter的对象?我做错了什么?
BR, mybecks
答案 0 :(得分:1)
也许没有调用特定的init方法?这是一个UITableViewController吗?也许你用initWithStyle:
初始化它?我会在你初始化数组的行上设置一个断点来检查。
答案 1 :(得分:0)
-initWithNibName:bundle:
是UIViewController
指定的初始值设定项,因此任何初始化代码都应该显示在该方法的覆盖中。如果此 是UITableViewController
的子类,那么标记是正确的,initWithStyle
是放置它的好地方。
此外,通常,viewDidLoad
/ viewDidUnload
为您提供了查看所需的分配/取消分配数据结构的好地方,但如果需要,可以重新创建。
答案 2 :(得分:0)
尝试以这种方式初始化NSMutableArray:
self.selectedWorkCenters = [[NSMutableArray alloc] init];
答案 3 :(得分:0)
好的,这是我的想法。在您的初始化中,您正在使用:
// This one is wrong, you are [NSMutableArray array] returns a NSArray which cannot be
// mutated so you cannot add objects to it. That is why it is not working.
//
self.selectedWorkCenters = [NSMutableArray array];
// This one is wrong because you have a leak here (Although it should work)
//
self.selectedWorkCenters = [[NSMutableArray alloc] init];
试试这个:
selectedWorkCenters = [[NSMutableArray alloc] init];
并将其放在 viewDidLoad 方法中。希望能帮助到你。让我知道:)
答案 4 :(得分:0)
我发现了错误。
在另一种方法中我有作业
selectedWorkCenters = availableWorkCenters;
availableWorkCenters未初始化 - 在调试器屏幕中始终为0x0。