0

2つのテキストフィールド(オブジェクトとキー)とボタン(2つの文字列を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

答えはあなたが投稿したコードにはありません。どこdictで宣言され、どのように設定されているかなどを把握する必要があります。しかし、何がうまくいかなかったかを指摘するかもしれないいくつかのことがあります。

まず、文字列を次のように宣言します。

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

これは文字列では完全に間違っています(すべてのタイプに当てはまるわけではありません)。AnNSStringは不変オブジェクトであり、作成時に値を指定する必要があります。ただし、型の変数NSString *には文字列への参照が含まれます。または、nil何も参照していない場合は-が含まれます。必要なのは次のとおりです。

NSString *currentObject;

オブジェクトへの参照を保持する変数を宣言しNSStringます。必要に応じて、もう少し使用することができます。

NSString *currentObject = nil;

したがって、変数は既知の値で始まります(そうでない場合、ローカル変数にはガベージ値が含まれ、インスタンス変数は必要に応じて自動的に//などに設定さnil0ます)。ただし、すぐに値を割り当てるため、割り当てるnil必要はありません。誤ってガベージ値を使用する可能性はありません。

これを間違えると、オブジェクトと参照がどのように機能するかが不明確になる可能性があり、を宣言して割り当てるときに間違いを犯した可能性がありますNSMutableDictionary

setObject:forKey:次に、キー/値を設定するために使用する必要があります。

[dict setObject:currentObject forKey:currentKey];

これらの2つの方法は微妙に異なり、通常は必要ですsetObject。違いについては、ドキュメントを参照してください。

HTH

于 2012-06-18T20:59:41.273 に答える
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 に答える