- (void)goToNextPage3 {
self.view3 = [[[ViewController3 alloc] init] autorelease];
view3.view.frame = CGRectMake(769, 0, 768, 1024);
[window addSubview:view3.view];
[UIView …SomeAnimationStuff...];
[UIView setAnimationDidStopSelector:@selector(animationDidStop3:finished:context:)];
}
- (void)animationDidStop3:(NSString *)animationID finished:(NSNumber *)finished context: (void *)context {
[self.view1a.view removeFromSuperview];
self.view1a = nil;
}
这是来自我的一个名为ViewController1a的视图控制器(“页面”)的代码:
- (void)buttonClicked {
MyBookAppDelegate* next2 =(MyBookAppDelegate *) [[UIApplication sharedApplication] delegate];
[next2 goToNextPage3];
}
这就像一个魅力。
现在我所有的切换都在ViewControllerSwitch中。我应该如何更改ViewController1a中的代码以访问goToNextPage3?
我试过了:
- (void)buttonClicked {
ViewControllerSwitch* next2 = (ViewControllerSwitch *) [[UIApplication sharedApplication] delegate];
[next2 goToNextPage3];
}
它在[next2 goToNextPage3]给我一个SIGABRT。
有什么想法吗?
更新:
我还在尝试,所以现在我这样做了:
在我的Viewcontroller1a.h中:
#import <UIKit/UIKit.h>
#import "ViewControllerSwitch.h"
@class ViewController2;
@class ViewControllerSwitch;
@protocol ViewController1Delegate;
@interface ViewController1a : UIViewController
{
id<ViewController1aDelegate>myDelegate;
}
@property(nonatomic, assign)id<ViewController1Delegate>myDelegate;
@end
@protocol ViewController1Delegate
-(void)goToNextPageV;
@end
并在我的.m文件中:
- (void)buttonClicked {
[self.myDelegate goToNextPageV];
}
我知道ViewControllerSwitch中缺少一些东西,但我不知道是什么。
答案 0 :(得分:0)
[[UIApplication sharedApplication]委托]仍然返回MyBookAppDelegate。为什么要尝试从中获取ViewControllerSwitch对象?您应该使用ViewControllerSwitch对象。你能提供关于这个对象的更多代码细节吗?
可能的解决方案(如果我理解你的话):
将ViewControllerSwitch作为AppDelegate中的对象,以便您可以使用: ViewControllerSwitch * switch = [[[UIApplication sharedApplication] delegate] viewControllerSwitch]
每个ViewController都可以引用您的ViewControllerSwitch
答案 1 :(得分:0)
正如LordTwaroog所说,这一行正在返回一个MyBookAppDelegate类型的对象(你的app委托):
[[UIApplication sharedApplication] delegate];
然后你试图将它转换为ViewControllerSwitch类型的对象:
(ViewControllerSwitch *)
这是不正确的。您的app委托是符合UIApplicationDelegate协议的NSObject子类。它不是视图控制器 正确的代码可能如下所示:
- (void)buttonClicked {
ViewControllerSwitch* next2 = [ViewControllerSwitch alloc] initWithNibName:@"ViewControllerSwitch" bundle:nil]
[next2 goToNextPage3];
}
但根据您的应用结构,这可能不是您想要的。这是创建一个ViewControllerSwitch类型的全新对象。它没有返回可能已经存在的其他ViewControllerSwitch对象。
当您使用app delegate执行切换时,您可以检索现有的app delegate对象(而不是检索新创建的对象类型)。 app委托是一个单例对象,可以通过调用[[UIApplication sharedApplication]委托]轻松检索。但是,您的ViewControllerSwitch对象可能不会设置为单例。因此,您对它的访问权限取决于您的对象所有权结构。我们必须看到更多代码来帮助您。