我正在阅读O'Rielly的iOS4编程,我使用的是比该书正在使用的更新版本的XCode。然而,这种微小的变化导致了一些混乱,因为我无法使用XCode 4.2创建基于窗口的应用程序。
无论如何,我开始了一个空项目,它给了我没有MainWindow.xib的iPhone应用程序的准系统结构。我已经获得了该项目的代表.h和.m。我继续创建自己的MainWindow.xib。我发现我必须将'主nib文件基本名称'设置为'MainWindow'才能显示我的笔尖,所以我就这样做了。
在我的MainWindow.xib中,我在窗口对象下面添加了一个按钮,以确保在运行项目时我拥有自己想要的东西。这是我现在的笔尖状态
不对AppDelegate.h和AppDelegate.m进行任何更改,我构建并运行了我的项目。我能看到按钮!但是,我无法点击按钮,当我按下主页按钮并恢复我的空应用程序时,我再也看不到按钮了!以下是一些我没有对其进行任何更改的文件:
的main.m
#import <UIKit/UIKit.h>
#import "EmptyWindowAppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([EmptyWindowAppDelegate class]));
}
}
EmptyWindowAppDelegate.m
#import "EmptyWindowAppDelegate.h"
@implementation EmptyWindowAppDelegate
@synthesize window = _window;
@synthesize managedObjectContext = __managedObjectContext;
@synthesize managedObjectModel = __managedObjectModel;
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
//...Omitted
答案 0 :(得分:0)
您可以在应用程序plist中指定主nib文件的名称(默认情况下为MainWindow.xib)。
要进一步调查您的问题,您可以创建一个基于默认视图的应用,并查看差异。在我看来,您在App Delegate的窗口属性和IB窗口对象之间的界面构建器中没有建立连接。这意味着didFinishLaunchingWithOptions中的窗口可能是nil,因此发送它的消息将不起作用。
答案 1 :(得分:0)
我认为问题在于AppDelegate.m中的这一行:
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
当应用程序启动时,您正在创建一个带有空白背景的新窗口并显示它。因为您已经在Interface Builder中设计了窗口,所以不必在代码中再次执行此操作。在didFinishLaunching下你需要的只是:
[self.window makeKeyAndVisible];
return YES;
然后改变“@synthesize window = _window;”只读“@synthesize window;”
下一步是更改AppDelegate.h文件。将代码更改为这样。
@interface AppDelegate : UIResponder <UIApplicationDelegate>
{
}
@property (strong, nonatomic) UIWindow *window;
现在您可以在InterfaceBuilder中执行的操作是将AppDelegate.m中的窗口属性与您设计的窗口链接起来。创建窗口属性后,它将显示在Outlets for EmptyWindowAppDelegate下。单击并从空穹顶到侧面板上的Window标签,或直接到屏幕上设计的窗口。
祝你好运