Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone-导航控制器不工作_Iphone_Uinavigationcontroller_Overlay_Modalviewcontroller - Fatal编程技术网

iPhone-导航控制器不工作

iPhone-导航控制器不工作,iphone,uinavigationcontroller,overlay,modalviewcontroller,Iphone,Uinavigationcontroller,Overlay,Modalviewcontroller,在iPhone上使用导航控制器我快疯了。 我有一个应用程序,里面有一个主xib(带窗口的那个),我放了一个NavigationController,里面有一个viewController。一切都已连接,并且使用正确的继承类名定义了ViewController 在didFinishLaunchingWithOptions中,我有: [self.window addSubview:navigationController.view]; [self.window makeKeyAndVisible];

在iPhone上使用导航控制器我快疯了。 我有一个应用程序,里面有一个主xib(带窗口的那个),我放了一个NavigationController,里面有一个viewController。一切都已连接,并且使用正确的继承类名定义了ViewController

在didFinishLaunchingWithOptions中,我有:

[self.window addSubview:navigationController.view];
[self.window makeKeyAndVisible];
在.h中,我有:

@interface MainAppDelegate : NSObject <UIApplicationDelegate> {
    IBOutlet UIWindow *window;
    IBOutlet UINavigationController* navigationController;
}

@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) UINavigationController* navigationController;

@end
主xib中的所有项目似乎都已连接。。。并由物业保留。AppDelegate及其窗口和导航控制器。。。具有相同navigationController的窗口rootviewcontroller。。。和应用程序代理的文件所有者

一切正常,但“首选项”窗口从未出现

你知道为什么吗

如果需要,我必须说,第一个视图控制器使相机界面出现,并在其上覆盖一层。该按钮位于该覆盖层上。imagePicker在ViewDidDisplay中显示如下:

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
[self presentModalViewController:picker animated:YES];
    [picker release];
编辑: 在ViewDidDisplay中,self.navigationController在方法的开始和结束处都正常。
在definePreferences中,self.navigationController为零。在这两个电话中没有一个叫甜菜。 没什么

编辑: 问题可能来自我初始化按钮所在的viewController的方式。 下面是从导航控制器调用的firstView调用的方法

- (void) viewDidAppear:(BOOL)animated {

    UIImagePickerController* picker = [[UIImagePickerController alloc] init];

    // Set the image picker source:
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;

    picker.showsCameraControls = NO;
    picker.navigationBarHidden = YES;
    picker.wantsFullScreenLayout = YES;

    // Insert the overlay
    OverlayViewController* overlayController = [[OverlayViewController alloc] initWithNibName:@"Overlay" bundle:nil];
    picker.cameraOverlayView = overlayController.view;

    // Show the picker:
    [self presentModalViewController:picker animated:NO];
    [picker release];

    [super viewDidAppear:YES];
}

但是。。。我该怎么做?

首先,不要调用iAction
设置首选项:
。这违反了KVC,最终会导致各种奇怪的行为
setX:
是名为
x
的属性的setter的保留名称

您不应使用此方法创建导航控制器(即
navController
)。您应该使用在NIB中创建的一个(
self.navigationController
)。检查是否为零。如果是,那么您要么没有在NIB中设置导航控制器,要么没有将其连接到此视图控制器

- (void) viewDidAppear:(BOOL)animated {

    UIImagePickerController* picker = [[UIImagePickerController alloc] init];

    // Set the image picker source:
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;

    picker.showsCameraControls = NO;
    picker.navigationBarHidden = YES;
    picker.wantsFullScreenLayout = YES;

    // Insert the overlay
    OverlayViewController* overlayController = [[OverlayViewController alloc] initWithNibName:@"Overlay" bundle:nil];
    picker.cameraOverlayView = overlayController.view;

    // Show the picker:
    [self presentModalViewController:picker animated:NO];
    [picker release];

    [super viewDidAppear:YES];
}

您还应该验证
nextWindow
是否为非零。

首先,切勿调用iAction
setPreferences:
。这违反了KVC,最终会导致各种奇怪的行为
setX:
是名为
x
的属性的setter的保留名称

您不应使用此方法创建导航控制器(即
navController
)。您应该使用在NIB中创建的一个(
self.navigationController
)。检查是否为零。如果是,那么您要么没有在NIB中设置导航控制器,要么没有将其连接到此视图控制器

- (void) viewDidAppear:(BOOL)animated {

    UIImagePickerController* picker = [[UIImagePickerController alloc] init];

    // Set the image picker source:
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;

    picker.showsCameraControls = NO;
    picker.navigationBarHidden = YES;
    picker.wantsFullScreenLayout = YES;

    // Insert the overlay
    OverlayViewController* overlayController = [[OverlayViewController alloc] initWithNibName:@"Overlay" bundle:nil];
    picker.cameraOverlayView = overlayController.view;

    // Show the picker:
    [self presentModalViewController:picker animated:NO];
    [picker release];

    [super viewDidAppear:YES];
}

您还应该验证
nextWindow
是否为非零。

我最终解决了这个问题。 看


我有些头发没了…:-)

我终于解决了这个问题。 看



我有些头发没了…:-)

@Rob Napier:好的,我重新命名了方法。我只调用[self.navigationController presentModalViewController:nextWindow动画:YES];下一次分配之后。nextWindow不是零。还是没什么。。。self.navigationController为零,但我可以检查xib中的所有内容,所有项目似乎都已连接。。。并由物业保留。AppDelegate及其窗口和导航控制器。。。具有相同navigationController的窗口rootviewcontroller。。。和应用程序代理的文件所有者。。。知道出了什么问题吗?“self.navigationController为零”← 那是你的问题。对nil对象调用
presentModalViewController:animated:
不会有任何作用。@Anomie:是的,我知道,但怎么了?事情似乎联系得很好。电话似乎是好的。那又怎样@Oliver你能为所有目标清理你的项目并重新构建它吗?同时从模拟器中删除你的应用程序…你关于ViewDidIspect的评论让我想知道你是否有多个view controller副本。NSLog(@“%@”,self)并确保始终查看同一对象。您还可以重写
setNavigationController:
,并查看是谁在调用它。@Rob Napier:好的,我重命名了该方法。我只调用[self.navigationController presentModalViewController:nextWindow动画:YES];下一次分配之后。nextWindow不是零。还是没什么。。。self.navigationController为零,但我可以检查xib中的所有内容,所有项目似乎都已连接。。。并由物业保留。AppDelegate及其窗口和导航控制器。。。具有相同navigationController的窗口rootviewcontroller。。。和应用程序代理的文件所有者。。。知道出了什么问题吗?“self.navigationController为零”← 那是你的问题。对nil对象调用
presentModalViewController:animated:
不会有任何作用。@Anomie:是的,我知道,但怎么了?事情似乎联系得很好。电话似乎是好的。那又怎样@Oliver你能为所有目标清理你的项目并重新构建它吗?同时从模拟器中删除你的应用程序…你关于ViewDidIspect的评论让我想知道你是否有多个view controller副本。NSLog(@“%@”,self)并确保始终查看同一对象。您还可以覆盖
setNavigationController:
并查看是谁在调用它。您是否检查了当您触摸按钮时,是否实际调用了
setPreferences:
方法,例如,使用日志语句或调试器断点?请注意,您的窗口和navigationController都不会被保留,因为您在IVAR而不是属性上设置了IBOutlet。因此,ivar最终是直接设置的,而不需要通过setter方法来保留它们。@Anomie是正确的,IBOutlet应该在属性上,但我怀疑这是问题所在,或者你宁愿崩溃也不愿得到零。@Rob Napier:uhhhh,你确定吗?我不想谈论一些我不确定的事情,但我已经用这种方式完成了一个大项目,IBOutlet设置在ivars上,而且永远不会