目标 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】:可能是因为saleList
是nil
开始的。在 Objective-C 中(在大多数情况下)向 nil
发送消息没有任何作用。
试试这个:
self.saleList = [Sale liveSales];
(假设该属性被声明为保留)。
【讨论】:
感谢 Nicholas,这似乎解决了我遇到的问题。你知道是否有一种不需要使用点表示法的方法(我试图避免它会随着代码变得更加复杂而变得混乱)?object.property = x
等价于[object setProperty:x]
。没有什么令人困惑的......它们真的是等价的!所以,在这种情况下,那就是[self setSaleList:[Sale liveSales]]
。
感谢 Yuji,这正是我想要的以上是关于目标 C:从类方法返回一个对象数组的主要内容,如果未能解决你的问题,请参考以下文章