2016-03-23 5 views
0

Ich arbeite an XCode7 und an diesem Projekt arbeite ich, UIAlertview funktioniert gut.
ich eine Kakao-Touch-Datei, damit eine neue Klasse definiert von NSobject vererben,UIAlertView kann keine Delegierungsmethoden aufrufen - Bereitstellungsziel iOS7

NSVerifier.h

@interface NSVerifier : NSObject<UITextFieldDelegate, UIAlertViewDelegate> 
{ 
..  
} 

und in der Implementierung ich habe:

NSVerifier.m

- (void)alertView:(UIAlertView *)aView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
//Breakpoint here 
.. 
} 

-(void)show{ 
     UIAlertView* t = [[UIAlertView alloc] initWithTitle:@"test" message:@"testing" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"ok", nil]; 
     [t show]; 
} 

innen viewDidAppear:

NSSVerifier* iVerifier = [[NSVerifier alloc] init]; 
[iVerifier show]; 

ich die ganzen Tag wurde versucht, diesen Unterbrechungsstopp zu machen, wenn ich die ok Taste drücken, aber der Haltepunkt wurde nie erreicht.

Auf der anderen Seite ...

Ich habe ein anderes Projekt, das während iOS7 mal gemacht wurde, und ich importiert diese Klasse in. Es funktioniert dort ...
Als ich die Delegation Methoden habe ich eine bekam Warnung der UIAlertView ist in iOS9 veraltet, und auf welchem ​​Gerät debuggen ich (iOS9), aber da die Bereitstellung Ziel auf beiden Geräten ist iOS7, sollte dies nicht immer noch funktionieren?

+0

Sind Sie die Instanz von 'NSVerifier' am Leben? – anhtu

+0

Verwenden Sie nicht das Präfix NS. Ich würde vorschlagen, Ihre eigenen Initialen zu verwenden. 'JXVerifier' stattdessen. Wenn Apple jemals eine Klasse mit dem Namen 'NSVerifier' veröffentlicht, wird der Code ungültig. – Fogmeister

Antwort

1

Haben Sie die Alert-Delegierten selbst zu sein:

t.delegate = self; 

bereiten?

Update: Und stellen Sie sicher, wo Ihre NSVerifier erstellt wird, hat es eine starke Referenz, so dass der UIAlertView-Delegat nicht später gelöscht wird, sobald die UIAlertView angezeigt wird. ZB in Ihrem ViewController erstellen Sie iVerifier in Ihrem .h:

@property (nichtatomaren, starken) NSVerifier * iVerifier;

andere dachte nur

+0

Er hatte bereits 'delegate: self' – anhtu

+0

Delegat ist auf init gesetzt – Jackson

+0

Sie zeigen auf jeden Fall Warnung auf Haupt-Thread? –

1

Wenn Sie iVerifier nicht behalten und es wird ausgeplant UIAlertView Delegierter Eigenschaft verursacht nil zu sein.

Nach helfen sollte:

// In interface 
@property (strong, nonatomic) NSSVerifier* iVerifier; 

// In implementation 

NSSVerifier* iVerifier = [[NSVerifier alloc] init]; 
self.iVerifier = iVerifier; 
[iVefirier show]; 
+0

Das ist, was ich vorgeschlagen habe –

+0

Sorry, ich habe es nicht in der ursprünglichen Antwort gesehen. Race-Bedingung :) –

1

Ich denke iVerifier freigegeben wird, nachdem der Code viewDidAppear gehen.

Versuchen Sie bitte: Behandeln Sie die iVerifier durch eine Eigenschaft mit starker Referenz.

Verwandte Themen