Мне нужно хранить целые числа и некоторые числа с плавающей запятой, чтобы делиться ими между представлениями, я знаю, что делать это в AppDelegate — оплошность, но это вводный курс по iOS, который я прохожу, и мы совсем не продвинулись, я имею в виду ВООБЩЕ (никакой парадигмы MVC, никаких уроков по Objective-C, никаких основных данных, никаких ошибок, с которыми мы можем столкнуться, или способов их обработки и т. д.). Мое приложение предназначено для серверов в ресторане, у меня есть 6 представлений, загруженных как подпредставления из ViewController приложения с различными элементами для заказа с помощью кнопок «+» и «-», чтобы увеличить или уменьшить заказанное количество. В AppDelegate у меня есть int
и float
для каждого количества элементов и промежуточный итог, который я объявил как свойства.
При каждом изменении количества элемента он вызывает метод для обновления счетчика элементов, отображения количества, а также обновления и отображения промежуточного итога для этого представления. В этом методе я также создаю экземпляр (?) делегата, чтобы иметь доступ к объявленным свойствам int и float.
-(void)updateAppSubtotal{
NSString *preSubString;
NSString *subString;
Final2AppDelegate* delegate = (Final2AppDelegate *)[[UIApplication sharedApplication]delegate];
delegate.eggTotal = eggs;
delegate.craTotal = crabs;
delegate.capTotal = caps;
delegate.quiTotal = quis;
delegate.bruTotal = brus;
delegate.pepTotal = peps;
delegate.tarTotal = tars;
delegate.balTotal = bals;
delegate.appSubtotal = appSub;
appSub = (eggs*eggPrice)+(crabs*crabPrice)+(caps*capPrice)+(quis*quiPrice)+(brus*bruPrice)+
(peps*pepPrice)+(tars*tarPrice)+(bals*balPrice);
if(appSub < 10){
preSubString = [[NSString alloc]initWithFormat:@"%1.2f",appSub];
}else if(appSub < 100 && appSub >= 10){
preSubString = [[NSString alloc]initWithFormat:@"%2.2f",appSub];
}else if(appSub < 1000 && appSub >= 100){
preSubString = [[NSString alloc]initWithFormat:@"%3.2f",appSub];
}else{
preSubString = [[NSString alloc]initWithFormat:@"%4.2f",appSub];
}
subString = [[NSString alloc]initWithFormat:@"$%@",preSubString];
appSubtotal.text = subString;
[preSubString release];
[subString release];
}
Затем в представлении «счета» я использую это, чтобы (попытаться) заполнить метки количествами и промежуточными суммами:
- (void)viewDidLoad {
NSString *preSubString;
NSString *subString;
NSString *preTaxString;
NSString *taxString;
NSString *preTotString;
NSString *totString;
Final2AppDelegate *delegate = (Final2AppDelegate *)[[UIApplication sharedApplication]delegate];
subFloat = delegate.appSubtotal + delegate.bevSubtotal + delegate.entSubtotal + delegate.sidSubtotal +
delegate.desSubtotal;
if(subFloat < 10){
preSubString = [[NSString alloc]initWithFormat:@"%1.2f",subFloat];
}else if(subFloat < 100 && subFloat >= 10){
preSubString = [[NSString alloc]initWithFormat:@"%2.2f",subFloat];
}else if(subFloat < 1000 && subFloat >= 100){
preSubString = [[NSString alloc]initWithFormat:@"%3.2f",subFloat];
}else{
preSubString = [[NSString alloc]initWithFormat:@"%4.2f",subFloat];
}
subString = [[NSString alloc]initWithFormat:@"$%@",preSubString];
billSubtotal.text = subString;
taxFloat = subFloat*taxRate;
if(taxFloat < 10){
preTaxString = [[NSString alloc]initWithFormat:@"%1.2f",taxFloat];
}else if(taxFloat < 100 && taxFloat >= 10){
preTaxString = [[NSString alloc]initWithFormat:@"%2.2f",taxFloat];
}else if(taxFloat < 1000 && taxFloat >= 100){
preTaxString = [[NSString alloc]initWithFormat:@"%3.2f",taxFloat];
}else{
preTaxString = [[NSString alloc]initWithFormat:@"%4.2f",taxFloat];
}
taxString = [[NSString alloc ]initWithFormat:@"$%@",preTaxString];
tax.text = taxString;
totalFloat = subFloat + taxFloat;
if(totalFloat < 10){
preTotString = [[NSString alloc]initWithFormat:@"%1.2f",totalFloat];
}else if(totalFloat < 100 && totalFloat >= 10){
preTotString = [[NSString alloc]initWithFormat:@"%2.2f",totalFloat];
}else if(totalFloat < 1000 && totalFloat >= 100){
preTotString = [[NSString alloc]initWithFormat:@"%3.2f",totalFloat];
}else{
preTotString = [[NSString alloc]initWithFormat:@"%4.2f",totalFloat];
}
totString = [[NSString alloc]initWithFormat:@"$%@",preTotString];
total.text = totString;
eggFinalQty.text = [NSString stringWithFormat:@"%d",delegate.eggTotal];
crabFinalQty.text = [NSString stringWithFormat:@"%d",delegate.craTotal];
capFinalQty.text = [NSString stringWithFormat:@"%d",delegate.capTotal];
quiFinalQty.text = [NSString stringWithFormat:@"%d",delegate.quiTotal];
bruFinalQty.text = [NSString stringWithFormat:@"%d",delegate.bruTotal];
pepFinalQty.text = [NSString stringWithFormat:@"%d",delegate.pepTotal];
tarFinalQty.text = [NSString stringWithFormat:@"%d",delegate.tarTotal];
balFinalQty.text = [NSString stringWithFormat:@"%d",delegate.balTotal];
oldFinalQty.text = [NSString stringWithFormat:@"%d",delegate.oldTotal];
vodkaFinalQty.text = [NSString stringWithFormat:@"%d",delegate.vodTotal];
martiniFinalQty.text = [NSString stringWithFormat:@"%d",delegate.martTotal];
redFinalQty.text = [NSString stringWithFormat:@"%d",delegate.redTotal];
whiteFinalQty.text = [NSString stringWithFormat:@"%d",delegate.whiTotal];
ipaFinalQty.text = [NSString stringWithFormat:@"%d",delegate.ipaTotal];
oliFinalQty.text = [NSString stringWithFormat:@"%d",delegate.oldTotal];
ribFinalQty.text = [NSString stringWithFormat:@"%d",delegate.ribTotal];
ravFinalQty.text = [NSString stringWithFormat:@"%d",delegate.ravTotal];
coqFinalQty.text = [NSString stringWithFormat:@"%d",delegate.coqTotal];
bufFinalQty.text = [NSString stringWithFormat:@"%d",delegate.bufTotal];
walFinalQty.text = [NSString stringWithFormat:@"%d",delegate.walTotal];
cubFinalQty.text = [NSString stringWithFormat:@"%d",delegate.cubTotal];
bleFinalQty.text = [NSString stringWithFormat:@"%d",delegate.bleTotal];
sauFinalQty.text = [NSString stringWithFormat:@"%d",delegate.sauTotal];
cacFinalQty.text = [NSString stringWithFormat:@"%d",delegate.cacTotal];
souFinalQty.text = [NSString stringWithFormat:@"%d",delegate.souTotal];
pesFinalQty.text = [NSString stringWithFormat:@"%d",delegate.pesTotal];
temFinalQty.text = [NSString stringWithFormat:@"%d",delegate.temTotal];
salFinalQty.text = [NSString stringWithFormat:@"%d",delegate.salTotal];
lobFinalQty.text = [NSString stringWithFormat:@"%d",delegate.lobTotal];
dreFianlQty.text = [NSString stringWithFormat:@"%d",delegate.dreTotal];
marFinalQty.text = [NSString stringWithFormat:@"%d",delegate.marTotal];
cheFinalQty.text = [NSString stringWithFormat:@"%d",delegate.cheTotal];
fonFinalQty.text = [NSString stringWithFormat:@"%d",delegate.fonTotal];
mouFinalQty.text = [NSString stringWithFormat:@"%d",delegate.mouTotal];
pieFinalQty.text = [NSString stringWithFormat:@"%d",delegate.pieTotal];
hazFinalQty.text = [NSString stringWithFormat:@"%d",delegate.hazTotal];
briFinalQty.text = [NSString stringWithFormat:@"%d",delegate.briTotal];
choFinalQty.text = [NSString stringWithFormat:@"%d",delegate.choTotal];
iceFinalQty.text = [NSString stringWithFormat:@"%d",delegate.iceTotal];
[preSubString release];
[subString release];
[preTaxString release];
[taxString release];
[preTotString release];
[totString release];
[super viewDidLoad];
}
Но когда представление загружает все метки количества для каждого элемента, а метки для налога, промежуточного итога и итога равны 0. Кажется, что значения не обновляются, и я не уверен, почему. Я разговаривал со своим другом, который посещал этот курс в прошлом семестре (я провожу целенаправленное исследование, так что большое спасибо всем на StackOverflow за то, что вы являетесь моим источником информации и идей), и я делаю почти то же самое. вещь, которую он сделал.
Почему значения в delegate
не обновляются?
F.Y.I. У меня есть аналогичный метод обновления для каждого представления, и каждое из них использует Final2AppDelegate *delegate = (Final2AppDelegate *)[[UIApplication sharedApplication]delegate];
. Будет ли это иметь какое-то отношение к этому, поскольку существует несколько экземпляров (?) делегата?
Редактировать
Я также пытался использовать методы viewWillAppear
и viewDidAppear
, но безуспешно. Я также не мог обновить метки с помощью обычной строки. Я убедился, что все мои соединения были установлены, но что-то все еще не работает. Я думаю просто воссоздать представление для этого, потому что пару дней назад мне пришлось переделывать другие представления, чтобы быть уверенным, но я не знаю, как это повлияет на это.
Редактировать 2
Поэтому я сделал метки в представлении напитков, которые обновляются до значения delegate.foo
, и кажется, что они обновляются правильно, и я использовал те же операторы, которые я пытался заставить работать в представлении «Счет», чтобы отображать подсчеты. и это тоже работало правильно. Что-то происходит посередине? Я собираюсь попробовать добавить новую метку в представление закусок, которая обновляется с учетом количества одного из напитков, чтобы увидеть, будет ли это обмениваться данными между представлениями.
Редактировать 3
Ну, это тоже не сработало (я не знаю, почему я подумал, что это может быть), поэтому, очевидно, есть некоторые проблемы с попыткой доступа к данным из разных представлений. Поскольку все мои ViewControllers просто получают указатели на один и тот же экземпляр каждый раз, я не вижу, как это будет иметь значение. Я могу получить доступ к значениям в представлении, в котором я их создаю, но если я попытаюсь из других представлений, я просто получу 0. У кого-нибудь есть больше информации, чтобы пролить свет на это?
Может быть, использование ViewController приложения, в котором все остальные представления являются подвидами вместо AppDelegate, имеет значение?
Также я создаю новый указатель на AppDelegate каждый раз, когда вызывается метод обновления, то есть каждый раз, когда нажимается одна из кнопок плюс или минус. Это вообще повлияет?
Код контроллера просмотра приложений
Вот как я контролирую просмотры. Я думал, что viewDid/WillAppear
и viewDid/WillDisappear
могут не вызываться из-за того, как они контролируются, но это выше моего понимания. Я знаю, что код длиннее, чем должен быть, но на данный момент я просто пытаюсь завершить этот проект и покончить с этим целенаправленным исследованием! :D
-(IBAction)loadBeverageView:(id)sender{
[self clearView];
[self.view insertSubview:beverageViewController.view atIndex:0];
}
-(IBAction)loadAppetizerView:(id)sender{
[self clearView];
[self.view insertSubview:appetizerViewController.view atIndex:0];
}
-(IBAction)loadEntreeView:(id)sender{
[self clearView];
[self.view insertSubview:entreeViewController.view atIndex:0];
}
-(IBAction)loadSideView:(id)sender{
[self clearView];
[self.view insertSubview:sideViewController.view atIndex:0];
}
-(IBAction)loadDessertView:(id)sender{
[self clearView];
[self.view insertSubview:dessertViewController.view atIndex:0];
}
-(IBAction)loadBillView:(id)sender{
[self clearView];
[self.view insertSubview:billViewController.view atIndex:0];
}
-(void)clearView{
if(beverageViewController.view.superview){
[beverageViewController.view removeFromSuperview];
}else if(appetizerViewController.view.superview){
[appetizerViewController.view removeFromSuperview];
}else if(entreeViewController.view.superview){
[entreeViewController.view removeFromSuperview];
}else if(sideViewController.view.superview){
[sideViewController.view removeFromSuperview];
}else if(dessertViewController.view.superview){
[dessertViewController.view removeFromSuperview];
}else{
[billViewController.view removeFromSuperview];
}
}