2010-03-04 3 views
3

경고를 표시하는 alertview가 있습니다. 내 헤더에는 UIAlertViewDelegate가 포함되어 있지만 경고보기의 단추를 클릭 할 때마다 응용 프로그램이 인식되지 않는 선택기가 전송되었다고 말하는 과도한 초과로 인해 충돌이 발생합니다.UIAlertView 단추 누르기로 인해 다른 모든 항목이 정상적으로 작동 할 때 충돌이 발생합니다.

어떤 아이디어라도 도움이 될 것입니다. 나는 전혀 문제가없는 다른 클래스에서 똑같은 코드를 실행하고있다. 여기

내 코드입니다 :

-(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"); 
} 
} 

그래서 난 그것을 알아낼 수있는 최선의, 사실 내가있는 UITableViewCell 서브 클래스에서 deletePatient 메소드를 호출하고, 내가 할로 환자 개체를 따라 전달하고 있습니다에 관련 그래서. 전달할 코드는 다음과 같습니다.

-(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]; 
} 
+1

인식 할 수없는 선택기 서명이란 무엇입니까? – executor21

+0

콘솔에 표시되는 오류는 다음과 같습니다. - [NSCFType alertView : clickedButtonAtIndex :] : 인식 할 수없는 선택기가 인스턴스 0x1766400에 전송되었습니다. – monotreme

답변

8

patientList 객체를 UIAlertView 인스턴스의 대리자로 설정 한 다음 해제했습니다. 사용자가 경고 버튼을 클릭하면 [delegate alertView : self clickedButtonAtIndex : buttonIndex]가 호출되지만 대리자 인 patientList는 이미 해제되어 더 이상 존재하지 않습니다. 변수 대리인에는 현재 가비지가 포함되어 있으므로 surplrizing하지 않으려면 alertView : clickedButtonAtIndex : selector;

// * .H 파일 :

... 
PatientListTableViewController *patientList; 
... 
@property(retain) PatientListTableViewController *patientList; 
... 
당신이 재산을/해제 외부 클래스를 생성하거나 사용할 때 해제/방법, 또는 patientList의 작성을 수행 clickedButtonAtIndex :

그냥 경고 alertView에 patientList 객체를 해제

// in * .m 파일 : @synthesize patientList;

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

그게 문제 였어! 정말 고마워! – monotreme

+0

매우 도움이되고 명확하며 직설적입니다. 고맙습니다! (: – Neeku

0

제공 한 코드에 문제가 없습니다. 누군가 다른 곳에서 환자의 물건으로 펑키 한 일이 일어나지 않는 한, 나는 여기 모두 좋아 보인다.

+0

흠. deletePatient 메서드에서 '// 다른 작업을 수행하십시오'는 실제로 개체를 잘 삭제하므로 환자 개체는 괜찮다고 생각합니다. 문제는 특히 경고입니다. 경고보기가 다른 클래스와 충돌 할 수 있음을 알고 있습니까? 그냥 생각. – monotreme

0

이와 같이 자동 렌더링 된 객체로 UIAlerView를 사용해보십시오.

UIAlertView *alert1 = [[UIAlertView alloc] initWithTitle:alertString message:nil delegate:self cancelButtonTitle:@"Yes" otherButtonTitles:@"No",nil] autorelease]; 
[alert1 show]; 
+0

아니요. 그건 작동하지 않았어. 몇 가지 다른 것들을 시도해 보았습니다. 여기에 거래가 있습니다 : IBAction 단추를 사용하여 UITableViewCell 하위 클래스에서 deletePatient 메서드를 호출하고 프로세스에서 개체 환자를 전달합니다. accessoryTapped 대리자 메서드를 사용할 때 문제가 발생하지 않으므로 하위 클래스가 있어야합니다. 위의 호출을 추가하겠습니다. – monotreme

관련 문제