【问题标题】:ModalViewController delegate confusionModalViewController 委托混淆
【发布时间】:2010-09-28 23:29:22
【问题描述】:

我需要呈现一个模态视图控制器,并在它被解除或通知我需要解除它时得到通知,看这里我仍然很困惑:

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html#//apple_ref/doc/uid/TP40007457-CH111-SW14

我有我的 mainViewController 和 myModalView 控制器,我有以下代码需要实现但不确定在哪里 - 首先是委托协议:

@protocol DataSyncDelegate <NSObject>
-(void) doneWithSync;
@end

这进入了哪个controller.h?我假设我的 modalViewController.h

第二个是我的实现:

-(void) doneWithSync {
    [self dismissModalViewControllerAnimated:YES];
}

这是进入哪个controller.m?我假设我的 mainViewController.m

我还有需要添加的委托属性:

id delegate;
@property (nonatomic, retain) id delegate;

这需要进入哪个controller.m?我假设我的 modalViewController.h

下面是我从 MainViewController 中展示 modalViewController 的方式:

DataSyncViewController *dataSyncViewController = [[DataSyncViewController alloc] initWithOptions:FALSE];
dataSyncViewController.delegate = self;
[self presentModalViewController:dataSyncViewController animated:NO];
[dataSyncViewController release];

截至目前,这给了我以下错误:

-[DataSyncViewController setDelegate:]: unrecognized selector sent to instance 0x5952e20

我在这里错过了什么?

编辑 - 这是我的模态视图控制器。H

#import <UIKit/UIKit.h>

@protocol DataSyncDelegate
-(void) doneWithSync;
@end

@interface DataSyncViewController : UIViewController {
    id <DataSyncDelegate>   delegate;
}

@property (nonatomic, retain) id <DataSyncDelegate> delegate;

@end

编辑 - 主视图控制器 .H 和 .M

#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
#import "DataSyncViewController.h"

@interface LoginViewController : UIViewController <DataSyncDelegate>{

}

@end

这里是模式的创建:

DataSyncViewController *dataSyncViewController = [[DataSyncViewController alloc] initWithOptions:FALSE];
dataSyncViewController.delegate = self;
[self presentModalViewController:dataSyncViewController animated:NO];
[dataSyncViewController release];

这是我对代表的实现:

-(void) doneWithSync {
    [self dismissModalViewControllerAnimated:YES];
}

现在一切看起来都在编译器中正确连接,但我收到以下错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[DataSyncViewController setDelegate:]: unrecognized selector sent to instance 0x59e4b40'

【问题讨论】:

  • 也发布你的 mainViewController :)
  • 不应该是@interface LoginViewController : UIViewController 而不是DataSyncComplete?
  • 抱歉,我在尝试不同的东西时切换了名称 - 它们正确匹配
  • 我忘记合成代表了!!!很抱歉我浪费了你这么多时间!
  • 大声笑我本来想问的,但我从来没有问过。也是我的错。没问题,很乐意提供帮助,只是希望我真的问过这个问题!!! :)

标签: iphone objective-c ipad


【解决方案1】:

您的主视图控制器是委托,应该实现协议。您的 modalView 有一个委托,当它被解除时会调用它。

【讨论】:

  • 我理解这个概念,但我的一些代码在错误的地方,这就是为什么我试图在上面如此详细 - 我在错误的地方有什么?
  • 您是否在 DataSyncViewController 中声明了@delegate 属性?
  • 是的,我的 dataSyncController 中有这个:id delegate; @property (nonatomic, retain) id delegate;
  • 你的 mainViewController 是否实现了 DataSyncDelegate 协议?
  • 我相信是这样,就像 .m 文件中这样:-(void) doneWithSync { [self dismissModalViewControllerAnimated:YES]; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
相关资源
最近更新 更多