这让我疯了!
我尝试使用表视图实现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!
答案 0 :(得分:1)
我有这个问题;下面概述的解决方案修复了它:
第1步:将SBTableAlert.h
和SBTableAlert.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,因为缺少引用。