0

アプリケーションにはアドレス帳機能があり、連絡先は NSMutableArray に保存されます。私

外部から連絡先にアクセスする別のクラスがあるため、次のように初期化しました

以下の新しいクラスで...

self.newListdata = [address_book_window listData];

これで、新しいクラスは newListdata を使用してすべての連絡先にアクセスできるようになりました。連絡先の数も

マッチング。ある状況では、実行時にアドレス帳から連絡先が削除された場合、新しい

class newListdata も更新する必要がありますが、思うように更新されていません。カウントは

も更新していません。連絡先を手動で削除する必要がありますか?

newListdata も。私が指摘しているように、アドレス帳の連絡先と同期されない理由

アドレス帳リストのデータ。私はObjective Cを学んでいるので、誰かが助けてくれるなら

使える。ありがとう。

4

2 に答える 2

1

newListdata と[address_book_window listData]が同じポインタ (同じオブジェクト) であるかどうかを比較します。

printf("compare %f and %f", newlistdata, [address_book_window listData])

それらは同じアドレス ストレージである必要があります。

注: listData はカプセル化されているため、コードの実装方法がわからないため、address_book_window は listData が常に同じアドレス ストレージにあることを保証しません (例で新しいリスト データを使用する場合)。そのため、newListData はダングリング ポインターを指す可能性があります。

このようなオブジェクトを追跡する最善の方法は、オブザーバー パターン、または可能であれば KVO を使用することです。説明するには長いので、ググってください ;)

于 2013-03-21T11:42:16.903 に答える
1

2 つの NSMutableArray がある場合、それらは同じオブジェクトへの強い参照を持っていますが、それらは 2 つの一意のオブジェクトです (2 つの MutableArray です)。NSMutableArray arrayWithArray:

配列が1つあり、オブジェクトを削除または追加するときにそれへの参照が2つある場合、それは単一のオブジェクトであるため、アクセスに使用する参照は関係ありません。言及したように「同期」されます(実際には 1 つのオブジェクトであるため、sync は正しくありません)

あなたの場合、listData は同じオブジェクトへの参照を含む新しい配列を返す可能性があります。このような場合、1 つの配列からオブジェクトを削除すると、2 番目の配列はそれを保持し (オブジェクトは割り当て解除されません)、2 つの配列は異なる。

于 2013-03-21T11:41:10.970 に答える