首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ModalViewController委托混淆

ModalViewController委托混淆
EN

Stack Overflow用户
提问于 2010-09-28 21:48:23
回答 1查看 2K关注 0票数 0

我需要提供一个模式视图控制器,并在它被取消或被通知我需要取消它时得到通知,看这里我仍然很困惑:

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

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

代码语言:javascript
复制
@protocol DataSyncDelegate <NSObject>
-(void) doneWithSync;
@end

这个放在哪个控制器.h中?我假设我的modalViewController.h

第二个是我的实现:

代码语言:javascript
复制
-(void) doneWithSync {
    [self dismissModalViewControllerAnimated:YES];
}

这是放在哪个控制器中的?我假设我的mainViewController.m

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

代码语言:javascript
复制
id delegate;
@property (nonatomic, retain) id delegate;

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

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

代码语言:javascript
复制
DataSyncViewController *dataSyncViewController = [[DataSyncViewController alloc] initWithOptions:FALSE];
dataSyncViewController.delegate = self;
[self presentModalViewController:dataSyncViewController animated:NO];
[dataSyncViewController release];

到目前为止,这给出了以下错误:

代码语言:javascript
复制
-[DataSyncViewController setDelegate:]: unrecognized selector sent to instance 0x5952e20

这里我漏掉了什么?

编辑-这是我的模式视图控制器.H

代码语言:javascript
复制
#import <UIKit/UIKit.h>

@protocol DataSyncDelegate
-(void) doneWithSync;
@end

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

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

@end

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

代码语言:javascript
复制
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
#import "DataSyncViewController.h"

@interface LoginViewController : UIViewController <DataSyncDelegate>{

}

@end

下面是这个模型的创建过程:

代码语言:javascript
复制
DataSyncViewController *dataSyncViewController = [[DataSyncViewController alloc] initWithOptions:FALSE];
dataSyncViewController.delegate = self;
[self presentModalViewController:dataSyncViewController animated:NO];
[dataSyncViewController release];

下面是我的委托实现:

代码语言:javascript
复制
-(void) doneWithSync {
    [self dismissModalViewControllerAnimated:YES];
}

现在在编译器中一切看起来都是正确的,但我得到了以下错误:

代码语言:javascript
复制
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[DataSyncViewController setDelegate:]: unrecognized selector sent to instance 0x59e4b40'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-28 21:51:54

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3813406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档