Проблема доступа с NSMutableArray - PullRequest
0 голосов
/ 02 июня 2010

моя проблема в том, что я не могу получить доступ к своему NSMutableArray в - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {}.

Я создаю свой NSMutableArray здесь:

nodes = [xmlDoc nodesForXPath:@"/xml/items/item/short_desc" error:nil];

if (nodes != nil && [nodes count] >= 1) {
    for (int i = 0; i < [nodes count]; i++) {
        CXMLElement *resultElement = [nodes objectAtIndex:i];
        result = [[[[resultElement attributeForName:@"data"] stringValue] copy] autorelease];       
        [short_desc addObject:result];
    }
}

и я могу распечатать содержимое short_desc везде:

NSLog([short_desc objectAtIndex:0]);

но не в (если я это сделаю, мое приложение вылетает):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

.....

NSString *date = [name objectAtIndex:0];


labelDate.text = date;
.....   

return cell;}

если я использую:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

.....

NSString *date = @"text...";


labelDate.text = date;
.....   

return cell;}

работает правильно.

ЛЮБОЕ РЕШЕНИЕ ДЛЯ ЭТОЙ ПРОБЛЕМЫ ???

Ответы [ 2 ]

3 голосов
/ 02 июня 2010

Вы не показываете, как вы создаете массив, но наиболее вероятной причиной является то, что вы не сохраняете свой массив и его освобождение до того, как вы нажмете метод, который вылетает. Как вы создаете массив имен? .. Прямо так, вы видите, что вы создаете массив так 62. name = [NSMutableArray arrayWithCapacity: 10]; вам нужно сохранить массив, иначе ОС освободит память, и вы не сможете получить к ней доступ ... вместо этого вы можете сделать

name =[ [NSMutableArray arrayWithCapacity:10] retain];

На плакате под мной была опубликована статья об управлении памятью, по которой вы должны перейти ... в любом случае, вот ссылка Руководство по управлению памятью

0 голосов
/ 03 июня 2010

Если вы создаете массив с использованием методов со словом «alloc», «new» или «copy» в имени метода - вам не нужно сохранять массив. В остальных случаях созданный массив является авторским массивом. Если вы хотите сохранить его - вы должны увеличить счетчик хранения, отправив метод retain (например, [names retain]). И не забудьте выпустить его, когда закончите его использовать (например, в методе dealloc).

Пожалуйста, прочитайте Руководство по управлению памятью .

...