objective-c - 代表不工作

标签 objective-c ios protocols uipopovercontroller

我正在尝试关闭弹出窗口并同时传输数据。我实现了一个委托(delegate) DismissPopoverDelegate 但它无法工作。但没有错误。如果点击保存按钮,它会注册它,并在调用代理之后完成该行。但它不起作用...

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

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

最佳答案

包含 .h 文件时存在循环引用。

dateViewPopOverViewController_iPad.h 包含 AddEventViewController_iPad.hAddEventViewController_iPad.h 包含 dateViewPopOverViewController_iPad.h,这会导致编译器抛出错误。

使用协议(protocol)的目的之一是避免这种循环引用。从 AddEventViewController_iPad.h 文件中删除 dateViewPopOverViewController_iPad.h 可能会解决该问题

关于objective-c - 代表不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6008931/

相关文章:

iphone - 创建 NSString 数据并将其保存到文件中

ios - iAd 错误但广告似乎显示正常

iOS 启动屏幕忽略智能反转

ios - Swift - 使用协议(protocol)和委托(delegate)将值传递回 ViewController

ios - UICollectionView Scroll 无法正确分页

android - GoogleAppIndex 真的为应用程序的内容编制索引吗?

iphone - ViewController - 如何正确使用它?

iphone - UITableView 动态数据源

swift - 在导航 Controller 中使用协议(protocol)委托(delegate)移动数据

ios - 如何根据实现该协议(protocol)的两个实例的身份为协议(protocol)实现 Equatable 协议(protocol)?