函数后数组为空

时间:2010-08-10 08:51:07

标签: iphone cocoa-touch nsmutablearray nsarray

我是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];
}

由于

2 个答案:

答案 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