1

これは私を狂わせています!

デモアプリケーションとまったく同じように、テーブルビューを使用してalertviewを実装してみました。ただし、私の場合は次のようにクラッシュします。 * -[SBTableAlert tableView:cellForRowAtIndexPath:]:割り当て解除されたインスタンス0x1e0aa800に送信されたメッセージ

私はこれがなぜそれをしているのか知っています、私はそれを追跡したり修正したりすることができないようです。また、デモアプリのバージョンが機能するのに私のバージョンが機能しない理由も説明できません。明らかな何かが欠けていない限り。

私の実装:

 SBTableAlert *alert = [[SBTableAlert alloc] initWithTitle:NSLocalizedString(@"contact_deleted_title", NULL) cancelButtonTitle:NSLocalizedString(@"contact_deleted_cancel_button_title", NULL) messageFormat:NSLocalizedString(@"contact_deleted_message", NULL)];
    [alert setType:SBTableAlertTypeMultipleSelct];
    [alert.view addButtonWithTitle:NSLocalizedString(@"contact_deleted_other_button_title", NULL)];
    [alert.view setTag:0];
    [alert setDataSource:self];
    [alert setDelegate:self];
    [alert show];

デバッグの目的で、デリゲートメソッドの実装はサンプルアプリから直接コピーアンドペーストされ、SBTableAlert.h/mは変更されません。

ヘルプ!

4

2 に答える 2

1

この問題がありました。以下に概説する解決策はそれを修正しました:

ステップ 1 :SBTableAlert.hとをプロジェクトに追加SBTableAlert.mします。このクラスは MRC を使用します。

ステップ 2:したがって、ARCクラス ファイル全体 (.m) を除外するように指示し、Target Build Phasesに移動して、次の図に示すようにフラグCompiler Sourcesを追加します。 -Fig1.png-fno-objc-arc

ステップ 3:アラートが表示される前にによって割り当てが解除されたため、message sent to deallocated instance 0x1e0aa800エラーが発生しています。SBTableAlert *alertARC

必要なときにいつでも利用できるようにします。それを強力なプロパティにします。

//
//  YourViewController.h
//

#import <UIKit/UIKit.h>
#import "SBTableAlert.h"

@interface YourViewController : UITableViewController <SBTableAlertDelegate,     SBTableAlertDataSource>{

@property (strong, nonatomic) SBTableAlert *strongAlert;

}

@end

//
//  YourViewController.m
//

@implementation YourViewController
@synthesize strongAlert;

次に、上記のコード(アラートを表示しようとする)は次のようになります

strongAlert = [[SBTableAlert alloc] initWithTitle:NSLocalizedString(@"contact_deleted_title", NULL) cancelButtonTitle:NSLocalizedString(@"contact_deleted_cancel_button_title", NULL) messageFormat:NSLocalizedString(@"contact_deleted_message", NULL)];
[strongAlert setType:SBTableAlertTypeMultipleSelct];
[strongAlert.view addButtonWithTitle:NSLocalizedString(@"contact_deleted_other_button_title", NULL)];
[strongAlert.view setTag:0];
[strongAlert setDataSource:self];
[strongAlert setDelegate:self];
[strongAlert show];

お役に立てれば

于 2013-07-29T10:04:36.153 に答える
0

[アラートの自動リリース] を逃しました。

ARC を使用しない場合、上記のコードは機能しません。ただし、ARC は使用しないでください。参照がないため、release/autorelease/dealloc を使用する必要があります。

于 2013-02-01T04:11:59.157 に答える