【发布时间】:2012-07-29 01:48:45
【问题描述】:
我遇到了一个非常奇怪的问题,我想我知道为什么会遇到它,但我似乎想不出解决办法。我确信这里没有编译器错误。由于我的代码错误,我遇到过很多这样的问题。
基本上,我有一个从 UIViewController 继承的名为 UnlockKeyboardViewController 的视图控制器,以及一个名为 UnlockKeyboard 的自定义视图(直接从 UIView 继承)。 UnlockKeyboard 的标题如下所示:
@interface UnlockKeyboard : UIView
{
NSArray *buttons;
NSArray *passcodeFields;
UIImage *buttonBackgroundImage;
UIImage *buttonBackgroundHighlightedImage;
UIImage *middleButtonBackgroundImage;
UIImage *middleButtonBackgroundImageHighlighted;
UIImage *screenBackgroundImage;
UIImage *infoViewContainerImage;
UIImage *keypadViewContainerImage;
UIImage *passcodeFieldsContainerImage;
UIImage *infoViewImage;
UIImage *passcodeViewImage;
UIView *infoViewContainer;
UIView *keypadViewContainer;
UIView *passcodeFieldsContainer;
UIView *infoView;
UIView *keypadView;
UIView *passcodeFieldsView;
UIView *infoToDisplayView; //The view the programmer passes to show in infoView.
}
@property(nonatomic, retain)UIImage *buttonBackgroundImage;
@property(nonatomic, retain)UIImage *buttonBackgroundHighlightedImage;
@property(nonatomic, retain)UIImage *screenBackgroundImage;
@property(nonatomic, retain)UIImage *keypadViewBackgroundImage;
@property(nonatomic, retain)UIImage *infoViewContainerImage;
@property(nonatomic, retain)UIImage *keypadViewContainerImage;
@property(nonatomic, retain)UIImage *passcodeFieldsContainerImage;
@property(nonatomic, retain)UIImage *infoViewImage;
@property(nonatomic, retain)UIImage *passcodeViewImage;
@property(nonatomic, retain)UIView *infoToDisplayView;
//Properties for container views.
@property(nonatomic, retain)UIView *infoViewContainer;
@property(nonatomic, retain)UIView *keypadViewContainer;
@property(nonatomic, retain)UIView *passcodeFieldsContainer;
@end
到目前为止,UnlockKeyboardViewController 实现如下所示:
@implementation UnlockKeyboardViewController
-(id)init
{
if((self = [super init]))
{
self.view = [[UnlockKeyboard alloc] init];
}
return self;
}
-(void)viewDidLoad
{
[super viewDidLoad];
}
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[UIView animateWithDuration:0.7 animations:^{
self.view.keypadViewContainer.frame = CGRectMake(0, 261, 320, 200);
} completion:^(BOOL finished){
}];
}
-(void)dealloc
{
[super dealloc];
}
@end
这是我的问题变得有趣。每当我尝试编译时,终端(这是一个越狱应用程序,所以没有 Xcode)给我以下错误:
In function ‘void __-[UnlockKeyboardViewController viewDidAppear:]_block_invoke_1(void*)’:
Segmentation fault: 11
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://developer.apple.com/bugreporter> for instructions.
但是,这个错误只有在我有这行时才会出现:
self.view.keypadViewContainer.frame = CGRectMake(0, 261, 320, 200);
如果我的动画块中没有那行,编译器不会给我那个错误,它会编译得很好。虽然,不管我放这条线,我总是得到分段线 11。
我认为这可能与 UIView 没有名为 keypadViewContainer 的成员这一事实有关,尽管 UnlockKeyboard 具有该属性并且是 UIView 的子类。我相信这是因为编译器实际上无法看到 UIView 和 UnlockKeyboard 之间的类层次结构。
如果我是对的,我不知道如何解决这个问题。想了一会儿。任何帮助我解决这个问题的意见将不胜感激。
【问题讨论】:
-
您是否在视图控制器中使用 nib 文件?如果不是,
loadView的基本实现会将UnlockKeyboardViewController的view属性设置为常规UIView,否定您在init中所做的事情(您不应该真正在@ 中加载view987654331@ 无论如何)。 -
你说“没有 Xcode”;你用的是什么编译器?
-
omz:我认为你是对的。那么我应该尝试在 loadView 中执行此任务吗?我没有使用任何笔尖或任何东西。这是纯代码,因为我没有使用 XCode。我不将 XCode 用于越狱应用程序。 benzado:仍在使用 GCC。我只是没有使用 XCode 作为我的 IDE。
-
是的,
loadView是加载视图的合适位置。 -
好吧,刚刚尝试将初始化移动到 loadView 并没有成功...
标签: objective-c uiview uiviewcontroller core-animation ios5