Массив пуст после функции - PullRequest
1 голос
/ 10 августа 2010

Я новичок в Cocoa Touch, у меня проблема, которую я пытаюсь выяснить. Буду признателен, если кто-нибудь может помочь.

Я хотел бы создать tableDataList для отображения на столе. AsyncViewController вызовет метод fillList TableHandler для инициализации данных таблицы. Но после вызова fillList tableDataList вернет пустой.

Может кто-нибудь объяснить мне эту проблему?

В «AsyncViewController.m»:

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [self.myHandler fillList];
    [super viewDidLoad];
}

В «TableHandler.m»:

@implementation TableHandler

#define ItemNumber 20

@synthesize tableDataList;

- (void) fillList {
    NSMutableArray *array = [NSMutableArray arrayWithCapacity:(NSUInteger) 20];

    for (NSUInteger i = 0; i < ItemNumber; i++) {
        [array addObject:[NSString stringWithFormat:@"Row %d", i]];
    }

    tableDataList = [NSArray arrayWithArray:array];
}

Спасибо

Ответы [ 2 ]

1 голос
/ 10 августа 2010

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

Если tableDataList является @property с retain, просто измените строку выше на:

self.tableDataList = [NSArray arrayWithArray:array];

и сеттер с этим справится.

Эквивалент @property (retain) NSArray *tableDataList; содержится в коде,

- (void)setTableDataList:(NSArray *)anArray
{
    if (tableDataList != nil) {
        [tableDataList autorelease]; 
    }
    tableDataList = [anArray retain];
}

Приведенный выше код автоматически освобождает и сохраняет объекты при замене переменной с использованием self.tableDataList = SOMETHING.Однако, если вы просто используете tableDataList = SOMETHING, но не используете вышеуказанный установщик, вы устанавливаете переменную напрямую.

0 голосов
/ 10 августа 2010

Вы уверены, что оно пустое, а не ноль?Возможно, вам придется выделить tableDataList, прежде чем использовать его

...