我有一个单屏应用程序,你可以在其中找到两个文本字段(对象和键)和一个按钮(应该将两个字符串存储在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];
}
任何想法?我一整天都在努力......
答案 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。保持强引用不会自动分配内存。