Цель C: вернуть массив объектов из метода класса - PullRequest
7 голосов
/ 26 января 2010

Я довольно много искал и не нашел ответа на свой вопрос, поэтому надеялся, что кто-нибудь сможет указать мне правильное направление

Я новичок в Задаче 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, в точке возврата будет правильное количество объектов

Кто-нибудь может указать мне правильное направление?

Спасибо:)

Dave

Ответы [ 2 ]

4 голосов
/ 26 января 2010

Прежде всего, вы должны выделить NSMutableArray:

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

равнина NSArray является неизменной по определению.

4 голосов
/ 26 января 2010

Вероятно, потому что saleList это nil для начала. Отправка сообщения на nil в Objective-C (в большинстве случаев) ничего не делает.

Попробуйте вместо этого:

self.saleList = [Sale liveSales];

(при условии, что свойство объявлено как сохраняемое).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...