UIViewController Представлено из табличного представления - не уничтожается при извлечении - PullRequest
0 голосов
/ 14 апреля 2011

У меня есть табличное представление, которое представляет UIViewController при каждом нажатии строки (отображает подробности для этой конкретной строки).

Код выглядит следующим образом:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath       *)indexPath 

{ 

if (!detail) {

detail = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];        

}

PlaceObject *info = [locationInfo objectAtIndex:indexPath.row];

detail.UniqueID = info.UniqueID;
detail.hidesBottomBarWhenPushed = YES;

[self.navigationController pushViewController:detail animated:YES];

self.detail = nil;
[detail release];

}

Проблема заключается вэта «деталь», кажется, не уничтожается, когда она извлекается из стека (когда пользователь возвращается к табличному представлению).

У меня есть несколько IBOutlets и Variable в классе UIViewController «detail»который я выпускаю в dealloc следующим образом:

- (void)dealloc
{
NSLog(@"Deallocing");

[storedURL release];
[storedNumber release];
[storedLocation release];
[nameLabel release];
[postCode release];
[description release];
[openTime release];
[nearestTube release];
[area release];
[image release];
[name release];
[phoneNumber release];
[scroll release];
[picture release];
[addressOne release];
[cost release]; 

[super dealloc];

}

Кто-нибудь может посоветовать, почему «детали» не могут быть уничтожены, когда пользователь возвращается к представлению таблицы?

EDIT

Хорошо, приведенный выше код теперь работает отлично.Ключ, казалось, устанавливал детализацию на ноль - хотя я не уверен, почему.

Ответы [ 3 ]

1 голос
/ 14 апреля 2011

alloc / init - сохранить количество: 1

настройка со свойством - сохранить счет: 2

нажатие на навигацию. контроллер - сохранить счет: 3

выскакивает нав. контроллер - сохранить счет: 2

Предполагается, что у свойства есть флаг сохранения, но в любом случае ваш счет хранения никогда не достигает 0

1 голос
/ 15 апреля 2011

Предположим, что detail является сохраняемым свойством. Переопределите метод получения, чтобы выполнить ленивую реализацию.

- (DetailViewController *)detail
{
    if (!detail)
    {
        detail = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
        detail.hidesBottomBarWhenPushed = YES;
    }

    return detail;
}

Кроме того, убедитесь, что вы отправляете -release на detail только -dealloc. Ваш -tableView:didSelectRowAtIndexPath: теперь выглядит следующим образом.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath       *)indexPath 
{ 
    detail.UniqueID = [locationInfo objectAtIndex:indexPath.row].UniqueID;
    [self.navigationController pushViewController:self.detail animated:YES];
}
1 голос
/ 14 апреля 2011

Пара вещей:

  1. Вы выделяете / запускаете его, но не отпускаете.Это проблема.
  2. Вы устанавливаете его для свойства (которое, вероятно, установлено для сохранения).Это проблема из-за (1).

Итак, чтобы исправить это, освободите объект после того, как вы покончили с локальной областью действия (конец этого метода).А поскольку это свойство, освободите его в методе dealloc класса-владельца.

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