2010-01-25 70 views
4

我已经做了一些搜索,并且没有真正找到答案,所以希望有人能够指引我朝着正确的方向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的计数总是为空,所以它似乎没有设置数组。如果我调试代码并进入类方法liveSales,那么在返回点有数组中的对象的正确数量

任何人都可以指向正确的方向吗?

谢谢:)

戴夫

+0

你在'@ interface'中定义了'saleList'是什么?你从编译器得到了什么警告? – Yuji 2010-01-25 23:32:39

回答

3

大概是因为saleListnil开始。在Objective-C中发送消息到nil(在大多数情况下)不会做任何事情。

试试这个:

self.saleList = [Sale liveSales]; 

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

+0

谢谢尼古拉斯,这似乎解决了我遇到的问题。你知道是否有办法做,而不需要使用点符号(我试图避免它是因为代码变得更复杂会变得混乱)? – Dave 2010-01-25 23:34:26

+2

'object.property = x'等效于'[object setProperty:x]'。没有什么让人困惑的......他们真的是等同的!因此,在这种情况下,这将是'[self setSaleList:[sale liveSales]]'。 – Yuji 2010-01-25 23:37:33

+0

谢谢Yuji,这实现了我想要的究竟 – Dave 2010-01-25 23:44:38

4

首先,你应该分配一个NSMutableArray

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

平原NSArray是通过定义不变。

+0

不是远程回答这个问题,但没有坏的建议,所以+0我猜。 – Chuck 2010-01-25 23:16:33

+0

你说得对Dirk - 我已经修改了代码以使用MutableArray,但我遇到的行为仍然存在 – Dave 2010-01-25 23:22:57