2011-05-15 4 views
0

동시에 팝업을 닫고 데이터를 전송하려고합니다. DismissPopoverDelegate 대리자를 구현했지만 작동하지 않습니다. 그러나 오류는 없습니다. 저장 버튼을 두드리면 저장하고 델리게이트를 호출 한 곳의 라인을 완성합니다. 그러나 그는 포함 할 때대리인이 작동하지 않습니다.

- (IBAction) selectStartDate:(id) sender { 
    NSLog(@"Select start date"); 
     dateViewPopOverViewController_iPad *dateViewPopOverViewController =  [[dateViewPopOverViewController_iPad alloc] init]; 
popover2 = [[UIPopoverController alloc] initWithContentViewController:dateViewPopOverViewController]; 

popover2.delegate = self; 
    popover2.popoverContentSize = CGSizeMake(320, 460); 

CGRect rect = CGRectMake(790, 170, 175, 300); 

[popover2 presentPopoverFromRect:rect inView:self.view  permittedArrowDirections:UIPopoverArrowDirectionRight animated:YES]; 

[dateViewPopOverViewController release]; 

/* 
if (dateViewController == nil) { 
    dateViewController = [[DateViewController_iPad alloc] initWithNibName:@"DateViewController_iPad" bundle:nil]; 
} 

[self presentModalViewController:dateViewController animated:YES]; 

[dateViewController retain]; 
*/ 
} 

- (void) dismissWithData:(NSString *)data 
{ 
NSLog(@"%@", data); 

[pop dismissPopoverAnimated:YES]; 
[pop release]; 
} 

dateViewPopOverViewController_iPad.h

#import <UIKit/UIKit.h> 
#import <Foundation/Foundation.h> 
@protocol DismissPopoverDelegate <NSObject> 
@required 
- (void) dismissWithData:(NSString *)data; 

@end 
@interface dateViewPopOverViewController_iPad : UIViewController { 
IBOutlet UIDatePicker *datePicker; 
IBOutlet UISegmentedControl *segmentedBar; 
IBOutlet UILabel *startLabel; 
IBOutlet UILabel *endLabel; 
IBOutlet UISwitch *allDaySwitch; 
NSDate *startDate; 
NSDate *endDate;  
NSDate *now; 
NSDateFormatter *dateFormatter; 
id<DismissPopoverDelegate> delegate; 
} 

@property (retain) id delegate; 
- (void) dismissWithData:(NSString *)data; 



dateViewPopOverViewController_iPad.m 

    @implementation dateViewPopOverViewController_iPad 

    @synthesize startDate, endDate, datePicker, segmentedBar, startLabel, endLabel, now, allDaySwitch, delegate; 

    - (IBAction) save:(id)sender { 
    if ([self startDateIsValid] && [self endDateIsValid]) { 
     //[[self parentViewController] setDatesForEvent:startDate eventEndDate:endDate allDay:[allDaySwitch isOn]]; 
    // [self dismissModalViewControllerAnimated:YES]; 
     NSLog(@"works"); 
     [self.delegate dismissWithData:@"Some text from popover"]; 
    NSLog(@"works1"); 
    } else { 
     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Ooops!" message:@"Please check the dates! Remember the end date must occur after the start date for the event to save." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alert show]; 
     [alert release]; 
    } 
} 
+1

어떻게 실패하고 있습니까? –

+1

예, 실패했습니다. – BDGapps

+0

그리고이를 지적하기 위해 위임자를 유지해서는 안됩니다. 순환 참조를 피하기 위해 할당 된 속성을 가져야합니다 (메모리 누수가 발생합니다). 이 게시물에서 답변을 확인하십시오. http://stackoverflow.com/questions/5811590/release-a-viewcontroller-correctly-that-sets-it-self-as-delegate-to-other-classes/5813247#5813247 –

답변

1

당신은 순환 참조가

AddEventViewController_iPad.h

#import <UIKit/UIKit.h> 
#import <AddressBook/AddressBook.h> 
#import <AddressBookUI/AddressBookUI.h> 
#import <EventKit/EventKit.h> 
#import <EventKitUI/EventKitUI.h> 
#import <MessageUI/MessageUI.h> 
#import <MessageUI/MFMailComposeViewController.h> 
#import <Foundation/Foundation.h> 
#import "AboutSme.h" 
#import "dateViewPopOverViewController_iPad.h" 
#import "addPersonViewControllerPopover_iPad.h" 
#import "PreviousEventsTableViewControllerPopover_iPad.h" 

@interface AddEventViewController_iPad : UIViewController <UITableViewDelegate, UITableViewDataSource, MFMailComposeViewControllerDelegate, UITextFieldDelegate, UIAlertViewDelegate,UIPopoverControllerDelegate,UINavigationControllerDelegate,UIPopoverControllerDelegate,ABPeoplePickerNavigationControllerDelegate, ABNewPersonViewControllerDelegate, DismissPopoverDelegate> { 
UIPopoverController *pop; 

AddEventViewController_iPad.m ... 작동하지 않습니다. h 파일.

dateViewPopOverViewController_iPad.hAddEventViewController_iPad.hAddEventViewController_iPad.hdateViewPopOverViewController_iPad.h을 포함합니다. 이로 인해 컴파일러에서 오류가 발생합니다.

프로토콜을 사용하는 목적 중 하나는 이런 종류의 순환 참조를 피하는 것입니다. dateViewPopOverViewController_iPad.h을 포함하여 AddEventViewController_iPad.h 파일에서 문제를 해결할 수 있습니다.

+0

이제 오류는 없지만 작동하지 않습니다 – BDGapps

+0

이제 몇 가지 로그를 메소드에 넣고 흐름이 호출되지 않습니다. 사람들이 당신을 도울 수있는 충분한 정보를 제공하지 못하기 때문에 '작동하지 않습니다'라고 말하지 마십시오. –

+0

괜찮습니까? – BDGapps

0

dismissPopoverAnimated으로 전화하면 위임자가 호출되지 않습니다. Apple UIPopoverDelegate 설명서에서 :

팝업 컨트롤러는 dismissPopoverAnimated 메서드에 대한 프로그래밍 방식 호출에 대한 응답으로이 메서드를 호출하지 않습니다. 프로그래밍 방식으로 팝업을 닫는 경우 dismissPopoverAnimated 메서드를 호출 한 직후 정리 작업을 수행해야합니다.

관련 문제