[viewcontroller retain]: сообщение отправлено освобожденной копии экземпляра после закрытия viewcontroller - PullRequest
0 голосов
/ 26 июня 2018

В моем приложении я представляю viewcontroller (подробное представление) после выбора элемента в коллекционном представлении:

[self presentViewController:detailView animated:YES completion:^{


                }];

В новом viewcontroller я запускаю avplayer, после чего я увольняю игрока, затем (viewview) viewcontroller и возвращаюсь к контроллеру home view. Здесь приложение аварийно завершает работу и выдает ошибку как [detailsviewController retain]: сообщение отправлено на освобожденный экземпляр. Это я делаю в Apple TV. Увольнение контроллеров с помощью действия меню.

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{ 

 if([assetType isEqualToString:@“MOV”] ||[assetType isEqualToString:@"PRG”] )
            {
                    // Asset landing page

                    NSMutableArray *assets=[[NSMutableArray alloc]initWithObjects:@"ViewAll",nil];
                    [assets addObjectsFromArray:self->allAssetsArray];
                    NSDictionary *SelectedAsset=[self->allAssetsArray objectAtIndex:indexPath.row];
                    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

                    DetailsViewController  *detailView =(DetailsViewController*)[storyboard instantiateViewControllerWithIdentifier:@"DetailsViewController"];

                    OnDemandAssetModel * assetModel=[[OnDemandAssetModel alloc]init];
                    assetModel.identifier=[SelectedAsset objectForKey:@"id"];
                    assetModel.assetCategory=@"";//[category objectForKey:@"name"];
                    assetModel.assetId=[SelectedAsset objectForKey:@"assetId"];
                    assetModel.assetName=[SelectedAsset objectForKey:@"movieName"];
                    assetModel.assetDuration=[SelectedAsset objectForKey:@"runningTime"];
                    assetModel.assetGenre=[SelectedAsset objectForKey:@"genre"];
                    assetModel.assetCategoryType=@"SVoD";
                    assetModel.assetDirector=[SelectedAsset objectForKey:@"director"];
                    assetModel.assetActors=[SelectedAsset objectForKey:@"cast"];
                    assetModel.assetCC=[SelectedAsset objectForKey:@""];

                    assetModel.assetAvailableUntil=[SelectedAsset objectForKey:@"availableUntil"];
                    assetModel.assetRating=[SelectedAsset objectForKey:@"rating"];
                    assetModel.assetPosterPath=[SelectedAsset objectForKey:@"movieImage"];
                    assetModel.assetContentType=[SelectedAsset objectForKey:@"movieType"];
                    assetModel.assetDescription=[SelectedAsset objectForKey:@"description"];
                    assetModel.assetReleasedYear=[SelectedAsset objectForKey:@"releasedYear"];
                    assetModel.subscriptionStatus=[SelectedAsset objectForKey:@"subscription"];

                    detailView.assetModel=assetModel;
                    detailView.selectedAssetID=assetModel.assetId;
                    detailView.selectedIndex=[NSIndexPath indexPathForRow:indexPath.row+1 inSection:0];
                    detailView.identifier=assetModel.identifier;

                    [self showViewController:detailView sender:nil];

                  //  [self presentViewController:detailView animated:YES completion:^{


                   // }];
            }


}

1 Ответ

0 голосов
/ 27 июня 2018

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

Добавьте @property (strong, nonatomic) DetailsViewController *detailsView; к вашему @interface, и в коде, который вы разместили, измените выделение на detailsView на:

self.detailView = (DetailsViewController*)[storyboard instantiateViewControllerWithIdentifier:@"DetailsViewController"];
...