Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Задача с segue-переходом в Storyboard

Anna | 2.07.2014 | нет комментариев

Есть UITableViewController с UISearchDisplayController в которых выводятся списки неких товаров. Для того, Дабы и в стержневой таблице и в таблице поиска информация преподносилась идентично была сделана ячейка GoodsCell (унаследована от UITableViewCell). GoodsCell сделана программно и имеет дальнейший примитивный вид:

@interface GoodsCell ()
{
	UIImageView *photoView;
	UILabel *titleLabel;
}

@end

@implementation GoodsCell

- (GoodsCell *)init {
	CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, 70.0f);

	self = [super initWithFrame:frame];
	if (self) {
		photoView = [[UIImageView alloc] initWithFrame:CGRectMake(10.0f, 10.0f, 50.0f, 50.0f)];
		[self addSubview:photoView];

		self.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

		titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(70.0f, 10.0f, 215.0f, 50.0f)];
		// задаём некоторые признаки метки
		[self addSubview:titleLabel];
	}

	return self;
}

- (void)setPhoto:(UIImage *)photo {
	photoView.image = photo;
}

- (void)setTitle:(NSString *)title {
	[titleLabel setText:title];
}

@end

В Storyboard-е сделан Seque от непринужденно GoodsViewController (отвечает за отображение списка товаров) к GoodsDetailViewController (детальная информация о товаре). Обработка нажатия происходит дальнейшим образом:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
	UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
	[self performSegueWithIdentifier:@"goodsDetail" sender:tableView];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
	if ([[segue identifier] isEqualToString:@"goodsDetail"])
	{
		GoodsDetailViewController *goodsDetailViewController = (GoodsDetailViewController *)[segue destinationViewController];

		if (sender == self.searchDisplayController.searchResultsTableView)
		{
			NSIndexPath *indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow];
			Goods *goods = [foundGoodsObjects objectAtIndex:indexPath.row];
			[goodsDetailViewController setGoods:goods];
		}
		else
		{
			NSIndexPath *indexPath = [goodsTable indexPathForSelectedRow];
			Goods *goods = [goodsObjects objectAtIndex:indexPath.row];
			[goodsDetailViewController setGoods:goods];
		}
	}
}

При нажатии на ячейку приложение падает с оплошностью:

*** Assertion failure in -[GoodsCell layoutSublayersOfLayer:], /SourceCache/UIKit/UIKit-2372/UIView.m:5776 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after executing -layoutSubviews. GoodsCell's implementation of -layoutSubviews needs to call super.' 

Код в нынешнюю версию плана был перенесен из иной git-ветки, при не дюже успешном конфликтном слиянии. Элементы в Storyboard и IBOutlet-ы добавлялись вручную. В подлинной ветке всё восхитительно работает — переход на детализированное представление происходит, ничего не падает.

Голову себе сломал, в чём задача. Need help, уважаемые прогрознатоки!

P.S. Пробовал размещать фэйковую ячейку в таблице и делать seque от неё — не помогает, итог тот же самый.

 

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB