SBTableAlert崩溃

时间:2012-11-12 20:37:28

标签: objective-c ios

这让我疯了!

我尝试使用表视图实现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不受影响。

HELP!

2 个答案:

答案 0 :(得分:1)

我有这个问题;下面概述的解决方案修复了它:

第1步:SBTableAlert.hSBTableAlert.m添加到您的项目中。本课程使用MRC。

第2步:因此,请告诉ARC排除整个类文件(.m),转到Target Build Phase并在Compiler Sources中添加-fno-objc-arc标志,如下图所示:http://www.invasivecode.com/blogimages/Xcode/ARC-Fig1.png

第3步message sent to deallocated instance 0x1e0aa800错误正在发生,因为SBTableAlert *alert在警报显示之前被ARC解除分配。

确保它在您需要时仍然存在。使它成为强大的财产,即 在

//
//  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];

希望这有帮助

答案 1 :(得分:0)

你想念[alert autorelease];

如果您不使用ARC,则上述代码将无效。但是,您不应该使用ARC,因此必须使用release / autorelease / dealloc,因为缺少引用。