Frage

Ich habe eine Alertview, die Displays in Ordnung. In meinem Kopf habe ich die UIAlertViewDelegate enthalten, aber aus irgendeinem Grund, wenn ich eine Taste auf der Lauer klicken sehen meine app stürzt mit einem schlechten Überschuss und sagte, dass ein Unbekannter Selektor gesendet wurde.

wäre Irgendwelche Ideen hilfreich. Ich habe genau die gleiche Code ohne Probleme überhaupt in anderen Klassen ausgeführt wird.

Hier ist mein Code:

    -(void)deletePatient
{
 NSLog(@"Delete");
 //Patient *patientInRow = (Patient *)[[self fetchedResultsController] objectAtIndexPath:cellAtIndexPath];
 NSMutableArray *visitsArray = [[NSMutableArray alloc] initWithArray:[patient.patientsVisits allObjects]];
 //cellAtIndexPath = indexPath;
 int visitsCount = [visitsArray count];
 NSLog(@"Visit count is %i", visitsCount);
 if (visitsCount !=0) 
 {
  //Display AlertView
  NSString *alertString = [NSString stringWithFormat:@"Would you like to delete %@'s data and all their visits and notes?", patient.nameGiven];
  UIAlertView *alert1 = [[UIAlertView alloc] initWithTitle:alertString message:nil delegate:self cancelButtonTitle:@"Yes" otherButtonTitles:@"No",nil];
  [alert1 show];
  [alert1 release];

 }
 else if (visitsCount ==0) 
 {
  //Do something else
 }

 [visitsArray release];

}

-(void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
 // the user clicked one of the OK/Cancel buttons
 if (buttonIndex == 0)
 {
  NSLog(@"Yes");

 }
 else
 {
  NSLog(@"No");
 }
}

So das Beste, was ich es herausfinden kann, sein auf die Tatsache, ich bin die deletePatient Methode von meinem UITableViewCell SubClass Aufruf und der entlang dem Patienten Objekts, wie ich dies tun. Hier ist der Code für das Bestehen entlang

-(IBAction)deletePatient:(id)sender
{
    NSLog(@"Delete Patient:%@",patient.nameGiven);
    PatientListTableViewController *patientList = [[PatientListTableViewController alloc] init];
    patientList.patient = patient;
    UITableView *tableView = (UITableView *)[self superview];
    tableView.scrollEnabled = YES;
    [patientList deletePatient];
    menuView.center = CGPointMake(160,menuView.center.y);
    [patientList release];
}
War es hilfreich?

Lösung

Sie setzen patientList Objekt als Delegierter UIAlertView Instanz, dann freigelassen. Wenn Benutzeralarm Schaltfläche klickt ruft es [Delegat Alertview: Selbst clickedButtonAtIndex: buttonIndex], aber die Delegierten, patientList wurde bereits freigegeben und nicht mehr existiert. Die Variable Delegierten in diesem Moment enthalten Müll, also nicht überrasch es keine Alertview: clickedButtonAtIndex: Wähler;

Just Release patientList Objekt in Alarm Alertview: clickedButtonAtIndex: Methode oder Sie patientList Erstellung / Freigabe beim Anlegen / Freigabe äußeren Klasse oder einfach Eigenschaft verwenden:

// in * .h-Datei:

...
PatientListTableViewController *patientList;
...
@property(retain) PatientListTableViewController *patientList;
...

// in * .m-Datei: @synthesize patientList;

...
self.patientList =  [[PatientListTableViewController alloc] init];

Andere Tipps

ist alles in Ordnung mit dem Code, den Sie zur Verfügung gestellt. Es sei denn, etwas flippig ist woanders mit dem Patienten Objekt passiert, würde ich sagen, alles sieht gut aus hier.

Versuchen UIAlerView als Autoreleased Objekt wie folgt verwendet wird;

UIAlertView *alert1 = [[UIAlertView alloc] initWithTitle:alertString message:nil delegate:self cancelButtonTitle:@"Yes" otherButtonTitles:@"No",nil] autorelease];
[alert1 show];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top