Objective C:从类方法返回一个对象数组

时间:2010-01-25 22:49:54

标签: iphone objective-c

我已经做了很多搜索,并没有真正找到我的问题的答案所以希望有人能够指出我正确的方向

我是Objective C的新手,并且在执行我认为非常简单的事情时会遇到一些问题。从类方法返回NSArray对象

我有以下类和关联的类方法

@implementation Sale

@synthesize title = _title;
@synthesize description = _description;
@synthesize date = _date;

+(NSArray*)liveSales
{
    NSArray *liveSales = [[NSArray alloc] init];

    for(int i = 0; i < 100; i++)
    {
        Sale *s = [[Sale alloc] init];
        [s setTitle:[NSString stringWithFormat:@"Sale %d", i+1]];
        [s setDescription:[NSString stringWithFormat:@"Sale %d descriptive text", i+1]];

        [liveSales addObject:s];

        [s release];
        s = nil;
    }

    return [liveSales autorelease];
}

@end

我有一个带有以下代码的ViewController(为了便于阅读而修剪):

@implementation RootViewController

@synthesize saleList = _saleList;


- (void)viewDidLoad {
    [super viewDidLoad];

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;

    [[self saleList] setArray:[Sale liveSales]];
}

我遇到的问题是saleList的计数始终为null,因此似乎没有设置数组。如果我调试代码并进入类方法liveSales,那么在返回时数组中有正确数量的对象

有人能指出我正确的方向吗?

谢谢:)

戴夫

2 个答案:

答案 0 :(得分:4)

可能因为saleListnil开头。在Objective-C中向nil发送消息(在大多数情况下)不会做任何事情。

请改为尝试:

self.saleList = [Sale liveSales];

(假设该属性被声明为保留)。

答案 1 :(得分:4)

首先,您应该分配一个NSMutableArray

NSMutableArray *liveSales = [[NSMutableArray alloc] init];

普通NSArray根据定义是不可变的。