gut*_*ker 3 delegates objective-c nsobject uialertview ios
我UIAlertView在课堂上的代表团遇到了困难ViewController.一切都很好,直到用户点击OK按钮 - 然后应用程序崩溃
Thread 1: EXC_BAD_ACCESS (code=2, address 0x8)
Run Code Online (Sandbox Code Playgroud)
ViewController.h:
#import <UIKit/UIKit.h>
#import "DataModel.h"
@interface ViewController : UIViewController
@end
Run Code Online (Sandbox Code Playgroud)
ViewController.m:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
DataModel *dataModel = [[DataModel alloc] init];
[dataModel ShowMeAlert];
[super viewDidLoad];
}
@end
Run Code Online (Sandbox Code Playgroud)
DataModel.h
#import <Foundation/Foundation.h>
@interface DataModel : NSObject <UIAlertViewDelegate>
- (void)ShowMeAlert;
@end
Run Code Online (Sandbox Code Playgroud)
DataModel.m
#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
Run Code Online (Sandbox Code Playgroud)
ViewController完美的.UIAlertDelegation方法...didDismissWithButtonIndex...- 没有委托的工作.UIAlertView delegate到nil-作品不转交.有什么线索有什么不对吗?
在这个方法中:
- (void)viewDidLoad
{
DataModel *dataModel = [[DataModel alloc] init];
[dataModel ShowMeAlert];
[super viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud)
您正在分配一个DataModel局部变量,该变量将在范围的末尾由ARC释放.因此,当执行解雇时,您的代表不再存在.解决此问题的方法是将您的视图存储DataModel在strong视图控制器的属性中.这样它就不会被解除分配.你会这样做:
- (void)viewDidLoad
{
self.dataModel = [[DataModel alloc] init];
[self.dataModel ShowMeAlert];
[super viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
695 次 |
| 最近记录: |