我是Cocoa Touch的新手,我有一个问题,我试图找出答案。如果有人能提供帮助,我将不胜感激。
我想创建一个tableDataList来显示在表上。 AsyncViewController将调用TableHandler fillList方法来初始化表数据。但是在fillList调用之后,tableDataList返回空。
有谁能解释我这个问题?
在“AsyncViewController.m”中:
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[self.myHandler fillList];
[super viewDidLoad];
}
在“TableHandler.m”中:
@implementation TableHandler
#define ItemNumber 20
@synthesize tableDataList;
- (void) fillList {
NSMutableArray *array = [NSMutableArray arrayWithCapacity:(NSUInteger) 20];
for (NSUInteger i = 0; i < ItemNumber; i++) {
[array addObject:[NSString stringWithFormat:@"Row %d", i]];
}
tableDataList = [NSArray arrayWithArray:array];
}
由于
答案 0 :(得分:1)
tableDataList需要保留新数组,否则将在您致电后立即自动释放。
如果tableDataList是带有retain
的@property,只需将上面的行更改为:
self.tableDataList = [NSArray arrayWithArray:array];
并且setter会为你处理它。
@property (retain) NSArray *tableDataList;
的等价物在代码中,
- (void)setTableDataList:(NSArray *)anArray
{
if (tableDataList != nil) {
[tableDataList autorelease];
}
tableDataList = [anArray retain];
}
使用self.tableDataList = SOMETHING
替换变量时,上述代码将自动释放并保留对象。但是,如果您只是使用tableDataList = SOMETHING
而未使用上述设置器,则直接设置变量。
答案 1 :(得分:0)
你确定它是空的而不是零吗?您可能需要在使用之前分配tableDataList