Iphone:无法从UITabBarController加载模式视图
我希望能够用UIViewController的实例呈现模式视图。在从标准UIViewController(根视图)演示它时,这样做没有问题。我已经设置了一个委托,使呈现根视图关闭模态视图。这是根据苹果公司的最佳实践 当我试图使相同的根视图在从UITabBarController加载根视图时呈现模式视图时,我遇到了严重的问题。前三次加载视图没有问题,但第四次调试程序在尝试调用委托方法时显示根视图已解除分配(“发送到解除分配实例的消息”)。我的猜测是,在显示模式视图时,根视图已经自动删除。我怎样才能避免这种情况 我设置的示例使用UITabBarController的模板,从第一个视图显示模式视图: FirstViewController.h(根视图控制器): ModalViewController.h:Iphone:无法从UITabBarController加载模式视图,iphone,objective-c,cocoa-touch,iphone-sdk-3.0,Iphone,Objective C,Cocoa Touch,Iphone Sdk 3.0,我希望能够用UIViewController的实例呈现模式视图。在从标准UIViewController(根视图)演示它时,这样做没有问题。我已经设置了一个委托,使呈现根视图关闭模态视图。这是根据苹果公司的最佳实践 当我试图使相同的根视图在从UITabBarController加载根视图时呈现模式视图时,我遇到了严重的问题。前三次加载视图没有问题,但第四次调试程序在尝试调用委托方法时显示根视图已解除分配(“发送到解除分配实例的消息”)。我的猜测是,在显示模式视图时,根视图已经自动删除。我怎样才能
#import <UIKit/UIKit.h>
@protocol ModalDelegate;
@interface ModalViewController : UIViewController {
id<ModalDelegate> delegate;
}
@property (assign) id<ModalDelegate> delegate;
- (IBAction)OKPressed:(id)sender;
@end
@protocol ModalDelegate <NSObject>
@optional
-(void)modal:(ModalViewController *)controller;
@end
您不应该在ModalViewController的
dealloc
实现中释放委托,因为您(正确地)没有保留它
此外,您还可以将模态视图控制器从自身中移除,而不是设置委托。我觉得这更简单。以下是iPhone开发中心对
父视图控制器为
负责解除合同
使用
presentModalViewController:动画:
方法。如果在
但是,模态视图控制器本身,
模态视图控制器
自动将邮件转发到
它的父视图控制器
一旦你使用
@property (assign) id<ModalDelegate> delegate;
#import <UIKit/UIKit.h>
@protocol ModalDelegate;
@interface ModalViewController : UIViewController {
id<ModalDelegate> delegate;
}
@property (assign) id<ModalDelegate> delegate;
- (IBAction)OKPressed:(id)sender;
@end
@protocol ModalDelegate <NSObject>
@optional
-(void)modal:(ModalViewController *)controller;
@end
#import "ModalViewController.h"
@implementation ModalViewController
@synthesize delegate;
- (IBAction)OKPressed:(id)sender
{
if ([self.delegate respondsToSelector:@selector(modal:)]) //Check to see if method responds to selector
{
[self.delegate modal:self];
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)dealloc {
[delegate release];
[super dealloc];
}
@end
@property (assign) id<ModalDelegate> delegate;
@property (retain) id<ModalDelegate> delegate;
- (void)dealloc {
//[delegate release];
[super dealloc];
}