Я пытаюсь поделиться строками и целыми числами в нескольких представлениях для финального проекта вводного курса разработки iOS, около 50, и мне интересно, как бы я это сделал... Я знаю, что парадигма MVC лучше, но мы этого не сделали. не добраться до очень продвинутых вещей, особенно основных данных. Я думал об использовании NSUserDefaults, я знаю, что это неправильно, но это приложение не должно быть невероятно быстрым, и я думаю, что это будет самый простой способ для меня. Мой вопрос: где и как я могу объявить объект NSUserDefault, который я буду использовать? Единственный раз в классе, когда мы использовали его, был в одном представлении. Если я объявлю его в первом загруженном представлении, я знаю, что могу получить к нему доступ с другими представлениями, но нужно ли мне импортировать файл заголовка первого представления в каждое из других или оно будет доступно независимо?
Обновлять
Поэтому я решил упростить задачу, сделав NSUserDefaults
свойством всех ViewControllers
. Затем, чтобы попытаться вернуть значения, я внедрил заголовки из каждого из ViewControllers
в представление, которому требуется доступ к данным, хранящимся в NSUserDefaults (которое также имеет свойство NSUserDefault
). Приложение работает ужасно, пока я не доберусь до этого экрана и ничего не обновится. Я уверен, что моя ошибка заключается где-то в том, как я реализовал NSUserDefaults
, но я не уверен, как это сделать правильно. Когда мы проходили их в классе (на самом деле это направленное исследование с «Sam's Teach Yourself iPhone Application Development in 24 Hrs» (тошнит, меня это бесит)), единственный раз, когда мы использовали их, было приложение с одним представлением, которое изменило альфа белого фона, чтобы его можно было использовать в качестве фонарика. Вот как это было представлено:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setInteger: var forKey: kVar];
[userDefaults synchronize];
Это то, что я пытался сделать в своем приложении:
В моих ViewController.h
файлах для КАЖДОГО представления:
...
@interface AppetizerViewController : UIViewController{
NSUserDefaults *userDefaults;
...
}
@property(assign)NSUserDefaults *userDefaults;
Затем, когда я нажал кнопку, я хотел сохранить это значение в userDefaults
:
-(IBAction)plusEgg:(id)sender{
eggs++;
eggString = [NSString stringWithFormat:@"%d",eggs];
eggQty.text = eggString;
eggOrderedQty.text = eggString;
[userDefaults setInteger:eggs forKey:kEggQty];
[userDefaults synchronize];
[self updateAppSubtotal];
}
-(IBAction)minusEgg:(id)sender{
eggs--;
if(eggs < 0){
eggs = 0;
}
eggString = [NSString stringWithFormat:@"%d",eggs];
eggQty.text = eggString;
eggOrderedQty.text = eggString;
[userDefaults setInteger:eggs forKey:kEggQty];
[userDefaults synchronize];
[self updateAppSubtotal];
}
Затем, поскольку у меня были все константы для NSUserDefault Keys
в файлах заголовков всех представлений, я реализовал все файлы заголовков в BillViewController
следующим образом и попытался получить к ним доступ следующим образом:
-(void)populateLabels{
pieFinalQty.text = [NSString stringWithFormat:@"%d",
[userDefaults integerForKey:kPieQty]];
hazFinalQty.text = [NSString stringWithFormat:@"%d",
[userDefaults integerForKey:kHazQty]];
briFinalQty.text = [NSString stringWithFormat:@"%d",
[userDefaults integerForKey:kBriQty]];
choFinalQty.text = [NSString stringWithFormat:@"%d",
[userDefaults integerForKey:kChoQty]];
iceFinalQty.text = [NSString stringWithFormat:@"%d",
[userDefaults integerForKey:kIceQty]];
}
-(void)getSubtotal{
NSString *preSubString;
NSString *subString;
subFloat = [userDefaults floatForKey:kAppSub]+[userDefaults floatForKey:kBevSub]+
[userDefaults floatForKey:kDesSub]+
[userDefaults floatForKey:kEntSub]+[userDefaults floatForKey:kSidSub];
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;
[preSubString release];
[subString release];
}
Мне жаль, что то, что вы, ребята, пытались мне объяснить, было, по-видимому, полностью выше моего понимания, и что мои соглашения об именах хреновы, но я работал над этим около 15 часов подряд с несколькими перерывами, и это около 4:00 здесь, в Миннесоте. Как я могу это сделать? Мне тоже жаль, что, возможно, придется четко указать, как это реализовать.