2013-07-01 51 views
0

我已經ARCfied簡單的包裝(姑且稱之爲customAlert)在UIAlertView中具有自己的代表像保留UIAlertView中代表

@protocol customAlert 
-(void)pressedOnYES; 
- (void)pressedNO 

定製警報本身包含UIAlertView中作爲一個強大的性能和alertView.delegate =自我; (customAlert是UIAlertView的委託)

我有 - customAlert的問題是在調用UIAlertView委託方法時釋放的。

FE

customAlert *alert = [customAlert alloc] initWithDelegate:self]; 
[alert show]; // it will call customAlert [self.alertView show] 

customAlert將上運行的循環被釋放,而下一個事件(按UIAlertView中按鈕將被髮送到重新分配的對象)

我必須以某種方式保留customAlert對象,以避免它(我不能使用customAlert實例)

回答

0

的財產關於你所面臨的問題,作爲一個直接的修復,而不是保持「警惕」作爲本地對象,嘗試宣告它作爲類的一個強大的特性。

但最好將'customAlert'保留爲'UIAlertView'的子類,而不是將'UIAlertView'作爲customAlert的屬性。

自定義警報類的示例(未添加太多評論,代碼簡單且具有自描述性)。

CustomAlert.h

#import <UIKit/UIKit.h> 

    @protocol customAlertDelegate<NSObject> 
    - (void)pressedOnYES; 
    - (void)pressedNO; 
    @end 

    @interface CustomAlert : UIAlertView 
    - (CustomAlert *)initWithDelegate:(id)delegate; 
    @property (weak) id <customAlertDelegate> delegate1; 
    @end 

CustomAlert.m

#import "CustomAlert.h" 

@implementation CustomAlert 
@synthesize delegate1; 


- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

- (CustomAlert *)initWithDelegate:(id)delegate 
{ 
    self = [super initWithTitle:@"Title" message:@"Message" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes", nil]; 
    if (self) { 
     //Assigning an object for customAlertDelegate 
     self.delegate1 = delegate; 
    } 

    return self; 
} 
//Method called when a button clicked on alert view 
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex) { 
     [self.delegate1 pressedOnYES]; 
    } else { 
     [self.delegate1 pressedNO]; 
    } 
} 
@end 

您與委託方法

ViewController.h

視圖控制器10
#import <UIKit/UIKit.h> 
#import "CustomAlert.h" 

@interface ViewController : UIViewController <customAlertDelegate> 
@end 

ViewController.m

#import "ViewController.h" 

@implementation ViewController 

- (IBAction)pressBtn:(id)sender 
{ 
    CustomAlert *alert=[[CustomAlert alloc] initWithDelegate:self] ; 
    [alert show]; 
} 

- (void)pressedOnYES 
{ 
    //write code for yes 
} 

- (void)pressedNO 
{ 
    //write code for No 
} 

@end 
+0

所以customClass:UIAlertView中..我會嘗試 – Injectios

+0

確定。立即修復是否有效(警戒 - 強大的財產)? – ratul

+0

不,它不是關於UIAlertView,原因是 - customAlert實例被釋放。如果customAlert實例被其他人保留(f.e屬性爲「strong」),那麼確定它可以工作 – Injectios