NSMutableDictionary添加新条目我填写文本字段并单击按钮

时间:2012-06-18 20:39:30

标签: objective-c nsmutabledictionary

我有一个单屏应用程序,你可以在其中找到两个文本字段(对象和键)和一个按钮(应该将两个字符串存储在NSMutableArray中。顺便说一句:不要混淆:“merken”是德语为“记住”;)

我的问题是,我想用这种方式填充我的NSMutableDictionary,但是现在它可以只是第一次保存Object和Key。

这是我的相应方法:

-(IBAction)merken:(id)sender { 

    NSString *currentObject = [[NSString alloc] init];NSString *currentKey = [[NSString alloc] init];

    currentObject = [typedObject text];
    currentKey = [typedKey text];

    [dict setValue:currentObject forKey:currentKey];

    //Check if the stings have been added to the Dict.
    int checkLengh = [dict count];
    NSString * checkString = [[NSString alloc] initWithFormat:@"Das Dict hat %d Zeile(n)", checkLengh];
    [checkLabel setText:checkString];

    [typedObject resignFirstResponder];
    [typedKey resignFirstResponder];
}

任何想法?我一整天都在努力......

3 个答案:

答案 0 :(得分:0)

答案不在您发布的代码中;要弄清楚dict的声明位置以及如何设置等等,需要知道;但是有些事情可能会指出出了什么问题。

首先声明字符串如下:

NSString *currentObject = [[NSString alloc] init];

字符串完全错误(并非适用于所有类型)。 NSString是一个不可变对象,创建时必须给它一个值。但是,NSString *类型的变量包含对字符串的引用,或nil - 表示何时引用任何内容。你只需要:

NSString *currentObject;

声明将保存对NSString对象的引用的变量。如果您希望您可以进一步使用:

NSString *currentObject = nil;

因此变量以已知值开头(否则局部变量将包含垃圾值,实例变量会自动设置为nil / 0 /等。 )。但是,您将立即分配一个值,因此不需要分配nil - 您不会意外地使用垃圾值。

错误地表明您可能不清楚对象和引用是如何工作的,并且在声明和分配NSMutableDictionary时可能会犯错误。

其次,您应该使用setObject:forKey:来设置键/值:

[dict setObject:currentObject forKey:currentKey];

这两种方法略有不同,通常需要setObject;查看文档中的差异。

HTH

答案 1 :(得分:0)

为了更好地理解我的情况,这里也是我如何声明对象:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITextField *typedObject;
@property (weak, nonatomic) IBOutlet UITextField *typedKey;
@property (weak, nonatomic) IBOutlet UILabel *checkLabel;
@property (strong, nonatomic) NSMutableDictionary *dict;


  - (IBAction)merken:(id)sender;

@end

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize typedObject;
@synthesize typedKey;
@synthesize checkLabel;
@synthesize dict;

我是否弄乱了NSMutableDictionary的声明? ......在行动中我已经包含了你的改进。

答案 2 :(得分:0)

在开始使用之前,您应该在某个时刻分配NSMutableDictionary。保持强引用不会自动分配内存。