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

Posted

技术标签:

【中文标题】目标 C:从类方法返回一个对象数组【英文标题】:Objective C: Return an array of objects from a class method 【发布时间】:2010-01-25 22:49:53 【问题描述】:

我进行了相当多的搜索,但并没有真正找到我的问题的答案,所以希望有人能指出我正确的方向

我是 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,则返回时数组中有正确数量的对象

谁能指出我正确的方向?

谢谢:)

戴夫

【问题讨论】:

你对@interface中的saleList的定义是什么?你从编译器得到什么警告? 【参考方案1】:

首先,你应该分配一个NSMutableArray

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

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

【讨论】:

没有远程回答问题,但建议不错,所以我猜是 +0。 你说得对,Dirk - 我已经修改了代码以使用 MutableArray,但我遇到的行为仍然存在【参考方案2】:

可能是因为saleListnil 开始的。在 Objective-C 中(在大多数情况下)向 nil 发送消息没有任何作用。

试试这个:

self.saleList = [Sale liveSales];

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

【讨论】:

感谢 Nicholas,这似乎解决了我遇到的问题。你知道是否有一种不需要使用点表示法的方法(我试图避免它会随着代码变得更加复杂而变得混乱)? object.property = x 等价于[object setProperty:x]。没有什么令人困惑的......它们真的是等价的!所以,在这种情况下,那就是[self setSaleList:[Sale liveSales]] 感谢 Yuji,这正是我想要的

以上是关于目标 C:从类方法返回一个对象数组的主要内容,如果未能解决你的问题,请参考以下文章

es6数组新特性

在 C# 中从类中声明一个数组

数组对象的方法

数组字符串对象的各种方法

数组对象修改某一个属性值的数据类型

数组和对象常用方法汇总