2013-07-26 28 views
0

任何人都可以通過我的項目的過程中走過我。我有太多的教程,我不確定要走哪條路線。所以我有兩個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或不是一個字符串?

這是順便說一下

- (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]; 
} 
+3

我不是:

在這種情況下,你必須覆蓋的方法awakeFromNib這樣

當然我明白你的問題。你的水果課對我來說很好,你想知道什麼? – trojanfoe

+0

你在你的ViewController實現中如何使用你的Fruit類? –

+0

你的問題不清楚。 **請澄清你實際要求的**。 – Greg

回答

1

你可以把你的水果類我ViewController。它是一個簡單的數據結構的包裝,也可以包含在NSDictionary中,但我認爲嘗試在代碼中創建具體對象是一種好習慣。如果你不誇大它可以使代碼更具可讀性。

試着減少你的代碼。它不一定是這個冗長的。另外,我認爲你需要在你的plist中使用簡單的水果字典,而不是嵌套字典。

-(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]; 
} 
+0

所以,我在正確的道路上不使用我的'水果'類的字符串到plist? – Jahm

+0

以上情況不明確? – Mundi

+0

這是,我真的很困惑。 – Jahm

0

的UITextField是的UIView的子類,所以你應該覆蓋的方法

- (id)initWithFrame:(CGRect)frame 

,而不是

- (id)init 

我看到一個IBAction爲...是你的UITextField由榫文件初始化?

- (void)awakeFromNib { 

    [super awakeFromNib]; 

    // customization here 
} 

或或在自己的意見,視圖 - 控制的viewDidLoad中的回調後,設置文本框的

+0

爲什麼downvote? – Manu

+0

Idk,對不起。我沒有倒下它。 – Jahm

+0

你試過了嗎?因爲對於UIView默認的初始化程序是initWithFrame,而不是init – Manu