UIAlertView
除ViewController
以外的OK
代表团遇到了困难。
一切都很好,直到用户点击Thread 1: EXC_BAD_ACCESS (code=2, address 0x8)
按钮 - 然后应用程序崩溃
#import <UIKit/UIKit.h>
#import "DataModel.h"
@interface ViewController : UIViewController
@end
ViewController.h:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
DataModel *dataModel = [[DataModel alloc] init];
[dataModel ShowMeAlert];
[super viewDidLoad];
}
@end
ViewController.m:
#import <Foundation/Foundation.h>
@interface DataModel : NSObject <UIAlertViewDelegate>
- (void)ShowMeAlert;
@end
DataModel.h
#import "DataModel.h"
@implementation DataModel
- (void)ShowMeAlert;
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Info" message:@"View did load!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
#pragma mark - UIAlertView protocol
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
NSLog(@"Index: %d", buttonIndex);
}
@end
DataModel.m
ViewController
UIAlertDelegation
- 完美无缺。...didDismissWithButtonIndex...
方法UIAlertView delegate
时 -
没有授权的工作。 nil
设置为{{1}}时 -
没有授权就可以工作。任何线索有什么问题?
答案 0 :(得分:8)
在这种方法中:
- (void)viewDidLoad
{
DataModel *dataModel = [[DataModel alloc] init];
[dataModel ShowMeAlert];
[super viewDidLoad];
}
您正在分配一个DataModel局部变量,该变量将在范围末尾由ARC释放。因此,当执行解雇时,您的代表不再存在。解决此问题的方法是将DataModel
存储在视图控制器的strong
属性中。这样它就不会被解除分配。你会这样做:
- (void)viewDidLoad
{
self.dataModel = [[DataModel alloc] init];
[self.dataModel ShowMeAlert];
[super viewDidLoad];
}