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

Dav*_*ave 7 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
Run Code Online (Sandbox Code Playgroud)

我有一个带有以下代码的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]];
}
Run Code Online (Sandbox Code Playgroud)

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

谁能指出我正确的方向?

谢谢 :)

戴夫

Dir*_*irk 5

首先,您应该分配一个NSMutableArray

NSMutableArray *liveSales = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)

根据NSArray定义,平原是不可变的。


Nic*_*ley 4

可能是因为一开始saleList就是这样。nil在 Objective-C中发送消息nil(在大多数情况下)不会执行任何操作。

试试这个:

self.saleList = [Sale liveSales];
Run Code Online (Sandbox Code Playgroud)

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

  • `object.property = x` 等价于 `[object setProperty:x]`。没有什么令人困惑的......它们真的是等价的!因此,在这种情况下,这将是“[self setSaleList:[Sale liveSales]]”。 (2认同)