0
所以我是新的iOS開發,我試圖委託按鈕點擊事件到另一個類。每當我點擊警報上的按鈕時,應用程序崩潰,我收到一個錯誤,說Thread_1 EXC_BAD_ACCESS。將UIAlertView委派給另一個類/文件?不工作?
這是我的代碼。
// theDelegateTester.h
#import <UIKit/UIKit.h>
@interface theDelegateTester : UIResponder <UIAlertViewDelegate>
- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;
@end
實現..
// theDelegateTester.m
#import "theDelegateTester.h"
@implementation theDelegateTester
- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
NSLog(@"Delegated");
}
@end
下面是我的視圖文件執行..
#import "appleTutorialViewController.h"
#import "theDelegateTester.h"
@interface appleTutorialViewController()
- (IBAction)tapReceived:(id)sender;
@end
@implementation appleTutorialViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewDidUnload
{
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}
- (IBAction)tapReceived:(id)sender {
theDelegateTester *newTester = [[theDelegateTester alloc] init];
UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"Alert!" message:@"This is a delegated alert" delegate:newTester cancelButtonTitle:@"Close" otherButtonTitles:@"Cool!", nil];
[myAlert show];
}
@end
嗯,是啊,這似乎做,但是那爲什麼我不能只是tapReceived內創建一個對象,並把它作爲委託參數?我必須將其傳遞給財產嗎?另外,當我調用del或myAlert的發佈時,我的項目也使用自動引用計數(ARC),並且不允許我發佈。據我所知,ARC基本上是自動垃圾收集,並釋放一個對象,當它不再看到它的用途? –
如果您不創建屬性,則TheDelegateTester的實例將簡單地超出範圍並從內存中移除。如果您將其設爲財產,那麼該財產將確保它不會從內存中移除。關於你的第二個問題:是的。這不完全相同,但您不必擔心(不應該)擔心ARC的保留/發佈。 –
問題是,代表通常很弱(非保留)參考。這意味着你(視圖控制器)負責保持對TheDelegateTester實例的引用。而這正是你不做的。 – DrummerB