任何人都可以指导我完成项目的过程。我有太多的教程,我不确定再采取哪条路线。所以我有两个UITextField
s接受一个字符串。具体如下:
UITextField *fruitNameField;
UITextField *fruitDescriptionField;
在我的ViewController
中,代码就像这样
NSString *fruitName = [[NSString alloc] initWithString:[fruitNameField text]];
NSString *fruitDescription = [[NSString alloc] initWithString:[fruitDescriptionField text]];
NSLog(@"Fruit: %@, Description: %@", fruitName, fruitDescription);
如上所示,它没有使用我的Fruit
类。
所以这是我的Fruit
实施
- (id)init
{
return [self initWithName:@"N/A"
description:@"N/A"
priority:2];
}
- (id)initWithName:(NSString *)name description:(NSString *)desc priority:(int)prio
{
self = [super init];
if (self) {
[self setFruitName:name];
[self setFruitDescription:desc];
[self setFruitPriority:prio];
}
return self;
}
#pragma mark -
#pragma mark Description
- (NSString *)description
{
return [[NSString alloc] initWithFormat:@"[%d] %@: %@", fruitPriority, fruitName, fruitDescription];
}
问题是,每当我从Fruit
输入字符串时,是否需要使用我创建的ViewController
类?
顺便说一下,这是我的ViewController
- (IBAction)writeToPlist:(id)sender
{
NSLog(@"writeToPlist");
NSString *fruitName = [[NSString alloc] initWithString:[fruitNameField text]];
NSString *fruitDescription = [[NSString alloc] initWithString:[fruitDescriptionField text]];
NSDictionary *fruitDetail = [NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:fruitName, fruitDescription, nil]
forKeys:[NSArray arrayWithObjects:@"Fruit", @"Description", nil]];
NSMutableArray *fruitPlist = [[NSMutableArray alloc] initWithContentsOfFile:[self filePath]];
if (fruitPlist == nil) {
fruitPlist = [[NSMutableArray alloc] init];
}
NSMutableDictionary *fruitDictionary = [[NSMutableDictionary alloc] init];
[fruitDictionary setObject:fruitDetail forKey:fruitName];
[fruitPlist addObject:fruitDictionary];
[fruitPlist writeToFile:[self filePath] atomically:YES];
[[self presentingViewController] dismissViewControllerAnimated:YES
completion:nil];
}
答案 0 :(得分:1)
你可以保留你的水果课程。它是一个简单数据结构的包装器,它也可以包含在NSDictionary中,但我认为尝试在一个代码中创建具体对象是一个好习惯。如果你不夸大它,它可以使代码更具可读性。
尝试减少您的代码。它不一定非常冗长。另外,我认为你需要一个简单的水果词典数组,而不是嵌套的词典。
-(void)writeToPlist {
NSArray *fruits = @[@{
@"name":nameTextField.text,
@"desc":descriptionTextField.text }];
[fruits writeToFile:[self filePath] atomically:YES];
}
请注意,这不会使用您的水果类。你直接从文本字段到plist,所以没有必要。您还可以编写一个将水果写入plist的方法。
-(void)writeToPlist:(Fruit*)fruit {
NSArray *fruits = @[ @{ @"name":fruit.name, @"desc":fruit.desc } ];
[fruits writeToFile:[self filePath] atomically:YES];
}
答案 1 :(得分:0)
UITextField是UIView的子类,因此您应该覆盖方法
- (id)initWithFrame:(CGRect)frame
而不是
- (id)init
我看到一个IBAction ...是由nib文件初始化的UITextField吗?
在这种情况下,您必须以这种方式覆盖方法awakeFromNib:
- (void)awakeFromNib {
[super awakeFromNib];
// customization here
}
或在拥有视图的viewcontroller中的viewDidLoad回调中或之后,设置textField