0

わからないエラーが発生しました。

印刷ジョブを支援するクラスがあります。

//.h

@interface PrintDelegate : NSObject <UIPrintInteractionControllerDelegate, UIAlertViewDelegate>

@property (weak, nonatomic) FFDetailViewController* controller;
@property (strong, nonatomic) NSMutableData*    pdf;
@property (assign) int          pageCount;
@property (strong, nonatomic) NSArray*          fields;
@property (weak, nonatomic)   UIPrintInteractionController* printController;

- (id) initWithPageCount:(int)pc forFields:(NSArray*)flds Controller:(FFDetailViewController*)ctlr;
- (int) printFromButton: (UIBarButtonItem*) btn;
- (void) makePDF;
- (void) shift:(PixelShiftDirection)dir pixelCount:(int)amt;
- (void) adjustFields;
- (void) onPrintComplete;

@end

印刷が完了すると、ユーザーが印刷出力を調整する(そして再度印刷する)かどうかを尋ねるアラートを表示します。

//.m
- (void) onPrintComplete
{
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Printing Complete" message:@"Would you like to adjust the field positions?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Adjust", nil];

    [alert show];
}

- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSString* clickedButton = [alertView buttonTitleAtIndex:buttonIndex];

    if ([clickedButton isEqualToString:@"Adjust"]) 
    {
        [self adjustFields];
    }
}

アラートのいずれかのボタンをタップすると、次のようなエラーが発生します。

-[__NSArrayM alertView:clickedButtonAtIndex:]: unrecognized selector sent to instance

不正なセレクターを受け取るオブジェクトは常に奇妙なものです(NSCFArrayMと__NSMallocBlockも見ました)。セレクターは、UIAlertViewDelegateプロトコルのメソッドです。PrintDelegaeオブジェクトではなく、誤ったオブジェクトにセレクターが送信される理由がわかりません。

ありがとう

4

3 に答える 3

0

PrintDelegate簡単に言えば、正しく保持していない可能性が高いということです。PrintDelegateより長いバージョンでは、インスタンスのライフ サイクルを調べる必要があります。clickedButton コールバックを処理するのに十分な長さである必要があります。PrintDelegateのメソッドにブレークポイントを設定して、-deallocいつ、どのように呼び出されるかを確認できます。

于 2012-06-30T02:14:54.813 に答える
0

__NSArrayM可変配列です。間違ったオブジェクトをデリゲートとして渡しているか、デリゲート メソッドが呼び出される前に解放、割り当て解除、再割り当て、および再初期化されています。NSCFArrayM、別の可変配列、およびも取得__NSMallocBlockしているので、割り当てられているがまだ初期化されていないメモリブロックであると推測されるため、2番目をお勧めします。アラート ビューを作成してから閉じるまでのメモリ管理を確認してください。XCode の分析ツールとプロファイリング ツールを試してみるのもよいでしょう。これらのツールは驚くほど優れています。

于 2012-06-30T02:15:23.320 に答える
0

あなたが投稿したコードは私には問題ないように見えます (ただし、UIAlertView は最終的にリークする可能性があります)。エラーの説明から、同じオブジェクトへのポインターを複数回解放したことが原因で、ヒープが破損している可能性があります。

于 2012-06-30T02:09:48.170 に答える