0

私は次のように辞書を宣言しています:

@property (weak, nonatomic) NSMutableDictionary *testVariableValues;
@synthesize testVariableValues = _testVariableValues;

次に、次のように辞書にデータを入力します。

- (IBAction)testPressed:(UIButton *)sender {

    self.testVariableValues = [NSMutableDictionary dictionary];

    if ([sender.currentTitle isEqualToString:@"Test 1"])
    {
        [self.testVariableValues setObject:[NSNumber numberWithDouble:5.2] forKey:@"x"];
        [self.testVariableValues setObject:[NSNumber numberWithInt:-1] forKey:@"y"];
        [self.testVariableValues setObject:[NSNumber numberWithInt:1] forKey:@"a"];
    } else if ([sender.currentTitle isEqualToString:@"Test 2"]) {
    // Continues like this

辞書にデータを入力するたびに、辞書の内容をコマンドラインに出力しているので、その部分が機能していることがわかります。次のような別の方法から辞書にアクセスしようとすると、問題が発生するようです。

if ([self.display.text isEqualToString:@"x"]) {
    NSLog(@"%f", [[self.testVariableValues objectForKey:@"x"] doubleValue]);
    [self.brain pushOperand:[[self.testVariableValues objectForKey:@"x"] doubleValue]];

このコードブロックのNSLogはnullを返します。これにより、testPressedメソッドの外部から辞書にアクセスできないと思います。誰かがこれに光を当てることができますか?辞書の実装はすべて間違っていますか?

ありがとう!

4

2 に答える 2

4

ディクショナリは強力なプロパティである必要があります。ディクショナリを弱くすると、testPressedメソッドが実行を終了するまでにディクショナリが解放されるためです。

変更する必要があります

@property (weak, nonatomic) ...

@property (strong, nonatomic) ...
于 2012-07-07T12:39:07.580 に答える
2

強力な属性を持つ辞書プロパティを宣言します。

@property (strong, nonatomic) NSMutableDictionary *testVariableValues;
于 2012-07-07T12:37:53.317 に答える