【发布时间】:2015-05-27 14:40:58
【问题描述】:
我对创建应用程序非常陌生,还没有完全弄清楚如何在 XCode 中使用 plist 函数。
我的问题是,我在视图控制器中有 3 种不同的输入法,用户可以从中选择值,它们是步进器、选择器视图和记录当前日期的日期,我想将其保存到一个 plist,以便用户可以在另一个视图控制器的表视图中查看这些条目。
我之前没有真正使用过 plist,因此我的问题可能听起来很愚蠢,但无论如何我需要一些帮助。
到目前为止,我已经设置了输入,但它们并没有真正做任何事情,我知道这个问题非常基本,但我正在努力寻找不太技术性的信息。
如果有帮助,我可以发布我的代码。
任何帮助将不胜感激。
@property (weak, nonatomic) IBOutlet UILabel *balesFedLabel;
@property (weak, nonatomic) IBOutlet UIStepper *balesFedStepper;
@property (weak, nonatomic) IBOutlet UIPickerView *fieldPickerView;
@property (weak, nonatomic) IBOutlet UILabel *dateLabel;
@property (weak, nonatomic) IBOutlet UITextField *sheepGroup;
@property (strong, nonatomic) IBOutlet UIBarButtonItem *backButton;
//Actions
- (IBAction)stepperValueChange:(id)sender;
- (IBAction)saveButton:(id)sender;
- (IBAction)textFieldDoneEditing:(id)sender;
@property NSArray *dataSource;
@property NSString *tempFieldSelection;
@property(nonatomic) UIKeyboardAppearance keyboardAppearanceDark;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self setupArray];
NSLocale *gbLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
NSString *dateFormatString = [NSDateFormatter dateFormatFromTemplate:@"dd/MM/yyyy" options:0 locale:gbLocale];
NSLog(@"dataFormatString: %@", dateFormatString);
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:dateFormatString];
NSString *stringFromDate = [dateFormatter stringFromDate:[NSDate date]];
self.dateLabel.text = stringFromDate;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {[self.view endEditing:YES];
}
- (void)setupArray {
_dataSource = [[NSArray alloc] initWithObjects:@"Cow Pasture", @"Top Lot", @"East Lot", @"West Lot", @"Front Meadow", @"Big Meadow", nil];
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return [_dataSource count];
}
- (UIView *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [_dataSource objectAtIndex:row];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
self.tempFieldSelection = [_dataSource objectAtIndex:[pickerView selectedRowInComponent:0]];
}
- (IBAction)stepperValueChange:(id)sender {double baleStepperValue = self.balesFedStepper.value;
self.balesFedLabel.text = [NSString stringWithFormat:@"%.f", baleStepperValue];
}
- (IBAction)textFieldDoneEditing:(id)sender {[sender resignFirstResponder];
}
- (IBAction)saveButton:(id)sender {
NSLog(@"Bales Fed: %@", self.balesFedLabel.text);
NSLog(@"Sheep Group: %@", self.sheepGroup.text);
NSLog(@"Current Field: %@", self.tempFieldSelection);
NSLog(@"Last Date Fed: %@", self.dateLabel.text);
}
【问题讨论】:
-
我不明白第 3 段,您希望来自所有三个来源的数据存储在 plist 中,或者只是最后一个,或者用户选择存储的内容?如果使用 plist 的原因是在视图控制器之间共享,那不一定是正确的选择,但需要更多信息。存储的数据还会改变还是只读?
-
我希望用户输入的数据都保存在一个plist中,很抱歉不清楚。
-
基本上用户将使用步进器选择一个整数,然后使用选择器视图选择一个位置,日期是自动的,然后用户将按下保存按钮,所有三位数据都会消失到 plist。
-
不要使用 plist 来存储您的数据。使用
CoreData(如果您已经在项目中使用它)或NSUserDefaults -
我不确定其中一些 cmets 来自哪里;我认为没有理由避免将数据存储在提供给应用程序沙箱的适当目录之一的 plist 中。 @SamWorfell 有用的第一步是创建一个包含您要保存的数据的
NSDictionary,您这样做了吗,您卡在哪里了? (如果这是您的唯一目标,也不必为了在控制器之间共享数据而将数据持久化到磁盘。)
标签: ios objective-c xcode