1

iOS アプリケーション全体で、次のタイプのオブジェクト参照コピー機能を使用しています。

例えばobjectA = objectB;

objectA に対して操作/変更を実行すると、objectB に自動的に反映されます。objectB の変更を反映するために、objectA を objectB に再度コピーする必要はありません。同じ場所 (アドレス) を指している/参照しているためです。

問題は、iOS 8.2 までは問題なく動作していましたが、iOS 8.3 ではまったく動作しないようです。

以下は、正しく機能しないコード スニペットの 1 つです。

    NSMutableDictionary *fieldObj = self.theData[indexPath.section ][indexPath.row];

    // Adding text to data array
    [fieldObj setObject:textField.text.stringByStrippingHTML forKey:@"value"];

    NSLog(@"Line 1 \n%@",fieldObj);
    NSLog(@"Line 2 \n%@",self.theData[indexPath.section][indexPath.row]);

上記のコードの 1 行目と 2 行目は、iOS 8.2 まで同じ出力を提供しています。

Line 1 
  {
    name = Name;
    required = NO;
    type = 4;
    value = asdfasdfasdfasdfsad;
  }
Line 2 
  {
    name = Name;
    required = NO;
    type = 4;
    value = asdfasdfasdfasdfsad;
  }

ただし、iOS 8.3 では、異なる出力を提供しています。

Line 1 
  {
    name = Name;
    required = NO;
    type = 4;
    value = asdfasdfasdfasdfsad;
  }
Line 2 
  {
    name = Name;
    required = NO;
    type = 4;
    value = "";
  }

私はここで何か悪いことをしていますか?

そうでない場合は、問題とその解決方法を知っている人はいますか?

編集: 上記の誤解を招く質問で申し訳ありません。上記の問題の背後にある理由は、indexPathForItemAtPoint:(CGPoint) が iOS 8.3 でのみ間違った indexPath を返すことです。

The code I have used is as follow:
// retrieve indexpath from uitextfield
    CGPoint pos = [textField convertPoint:CGPointZero toView:self.collectionView];
    NSIndexPath *indexPath = [self.collectionView indexPathForItemAtPoint:pos];

上記のコードは、iOS バージョン 8.2 まで正常に動作しています。

4

2 に答える 2

2

実際の状況を反映すると思われる簡単なスニペットを作成しました。可変コンテナーが内部にある不変コンテナーです。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
        NSArray * array = @[@{@"KEY" : @"OLD" }.mutableCopy];
        NSMutableDictionary * dict = array.firstObject;
        [dict setObject:@"NEW" forKey:@"KEY"];
        NSLog(@"Mutated dict %@",dict);
        NSLog(@"From original source %@",array.firstObject);



    }
    return 0;
}

すべてが期待どおりに機能しているように見えます。別の場所で何かを行っていることは確かですか?

2015-04-15 08:37:09.740 prova[912:117578] 変異辞書 { KEY = NEW; }
2015-04-15 08:37:09.741 prova[912:117578] 元のソースから { KEY = NEW; }

また、両方のオブジェクトが予想どおり同じアドレスを持っています。

(lldb) 式 dict (__NSDictionaryM *) $2 = 0x00000001003004a0 1 つのキーと値のペア
(lldb) 式 array.firstObject (__NSDictionaryM *) $3 = 0x00000001003004a0 1 つのキーと値のペア

于 2015-04-15T06:41:13.817 に答える