2010-01-25 71 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