0

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

我的问题是,我想以这种方式填充我的 NSMutableDictionary,但现在它只能在第一次保存对象和键。

这是我的方法:

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

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

4

3 回答 3

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 的声明吗?...在行动中,我已经包含了您的改进。

于 2012-06-19T12:23:00.947 回答
0

你应该在开始使用它之前分配你的 NSMutableDictionary。保持强引用不会自动分配内存。

于 2012-06-19T12:35:35.730 回答
0

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

首先你声明你的字符串如下:

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

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

NSString *currentObject;

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

NSString *currentObject = nil;

所以变量以一个已知的值开始(否则局部变量会包含一个垃圾值,实例变量会自动设置为nil/ 0/etc. 视情况而定)。但是,您将立即分配一个值,因此nil不需要分配 - 您不会意外使用垃圾值。

弄错这表明您可能不清楚对象和引用是如何工作的,并且您可能在声明和分配NSMutableDictionary.

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

[dict setObject:currentObject forKey:currentKey];

这两种方法有细微的不同,你通常想要setObject; 查看文档以了解差异。

高温高压

于 2012-06-18T20:59:41.273 回答