0

nameDoubleAction とターゲットを設定すると、名前をダブルクリックしたときに ABPeoplePickerView が期待どおりに動作します。プロパティ用の列もあります。属性インスペクターで設計時に電子メールや電話などのプロパティを追加できます。1 人の複数の電話番号など、複数の値を持つプロパティの場合でも、かなりうまく機能します。たまたまプロパティ列をクリックしても、ダブルクリックが機能するように見えます。

ただし、実際のアプリケーションで、プロパティ列をダブルクリックするとアプリがハングすることがわかりました。

// action called by double clicking on people picker or by OK button
- (IBAction)acnPickerDoubleClick:(id)sender {

上記の行で実行がハングし、デバッガーは EX_BAD_ACCESS を報告し、送信者は 0x0 です。

最小限のコードで 4 つのテスト アプリを作成しました。2 と 4 は問題なく動作し、1 と 3 は上記のようにクラッシュします。3 と 4 は、私が見る限り同一であり、互いに数分以内に作成されています。コードは一方から他方にコピーされただけです。しかし、最初のものはクラッシュし、2 つ目は問題ありません。唯一の違いは、Xib で何かを作成した順序、AddressBook フレームワークを追加した順序、または #imports を記述した順序です。

AddressBook/AddressBook.hもう1つの不条理は、コンパイラがこの行を受け入れるためにインポートするだけでよいということです:

@property (strong) IBOutlet ABPeoplePickerView *picker;

AddressBook/ABPeoplePickerView.h同様にインポートする必要はないようですが、実際のアプリは後者を追加しないとコンパイルされません。

4

1 に答える 1

0

同じ問題に遭遇し、メソッドの署名を次のように変更して修正しました。

- (IBAction)acnPickerDoubleClick:(id __unsafe_unretained)sender {

そしてそれはうまくいくように見えました。ピッカー ビュー階層内の実際の送信者は、アクションが呼び出されるまで十分長く留まってはなりません。私は__unsafe_unretained10.6+ をターゲットにしているので使用していますが__weak、10.7+ プロジェクトでうまくいくかもしれません。

于 2014-10-14T00:32:59.520 に答える