ОБНОВЛЕНИЕ - Причина найдена! ... пожалуйста, прочитайте ниже и предложите решение:
При создании видео, чтобы показать эту проблему, я обнаружил, почему это происходит ...
Любой элемент управления / элемент, который определен между #imports
& @implementation DetailViewController
в .m
файле, теряется исходным detVC при создании нового экземпляра VC.
Пример:
Я включаю видео, которое воссоздает эту проблему. Как показано, все элементы управления работают, кроме UISegmentedControl
& a UILabel
.., оба из которых определены в DetailViewController.m
как:
#import "DetailViewController.h"
UISegmentedControl *sortcontrol;
UILabel *incrementLabel;
@implementation DetailViewController
Ссылка на видео - http://www.youtube.com/watch?v=2ABdK0LkGiA
Я думаю, что мы довольно близки .. Жду ответа !!
P.S .: Я думаю, что этой информации достаточно, это может привести нас к решению, но при необходимости я тоже могу поделиться кодом.
РАНЕЕ:
В нашем приложении есть detailViewController (detVC), который обычно «выталкивается» из UITableViewController.
Теперь мы также реализуем Push-уведомления, которые будут «модально» представлять тот же detVC при получении уведомления, что, в свою очередь, может происходить на любом контроллере представления.
Все работает нормально, пока не будет представлено уведомление через detVC, в то время как другой экземпляр detVC уже был активным контроллером представления (выдвинутым ранее через TableView).
Проблема возникает, когда представленный detVC отклоняется - выдвинутый detVC «теряет» контроль над всем - Он не указывает на те же данные, что и раньше, и даже UISegmentedControl
на панели навигации указывает на -1
index on нажимаем любой указатель!
Почему такое происходит, когда мы создаем отдельный экземпляр detVC? Почему это влияет на более раннюю версию detVC? Как это может быть решено / Что нужно узнать об цели C здесь? (К вашему сведению, мы используем ARC в проекте)
Спасибо
РЕДАКТИРОВАТЬ - Некоторые код:
При нажатии:
ProductDetailViewController *detailViewController = [[ProductDetailViewController alloc] init];
detailViewController.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:detailViewController animated:YES];
detailViewController.serverOffset=serverOffset;
detailViewController.prdctIndex = indexPath.row;
При представлении посредством уведомления:
- (void)displaySingleProduct:(NSDictionary*)userInfo{
ProductDetailViewController *onePrdVC = [[ProductDetailViewController alloc] init];
UINavigationController *addNav = [[UINavigationController alloc] initWithRootViewController:onePrdVC];
onePrdVC.justOne=YES;
onePrdVC.onePrdIDtoLoad=[[[userInfo valueForKey:@"prd"] valueForKey:@"id"] intValue];
[self.navigationController presentModalViewController:addNav animated:YES];
}
В detVC есть класс Product
, который получает данные из значений, хранящихся в строке prdctIndex в таблице SQLite.
После отклонения представленного detVC посредством уведомления класс Product
отправленного detVC начинает указывать на строку, которая использовалась для класса Product
в представленном detVC. И в viewDidAppear
нет такого кода, который изменил бы Product
класс.
Итак, эта проблема UISegmentedControl
, упомянутая выше, и некоторые другие проблемы вызывают боль! По сути, весь detVC ведет себя странно - и это снова работает, если мы просто вставим и снова нажмем его!
РЕДАКТИРОВАТЬ 2
У меня есть дополнительная информация, которая может привести к причине.
Если я запускаю viewDidLoad
на viewDidAppear
, как это:
if (!justOne) {
aProduct = [allProducts getProduct:(prdctIndex+1) one:NO];
[self viewDidLoad];
[self populateDetails];
}
нажатый detVC восстанавливает элемент управления, и каждый элемент / элемент управления начинает работать должным образом (но не в идеальном режиме). Таким образом, совершенно ясно, что отдельный экземпляр представленного detVC портит ранее выдвинутый detVC, и требуется переустановка всех элементов управления / указателей через viewDidLoad
.
Можно ли из этой информации сделать полезный вывод?