使用Xcode 4.2在MonoTouch中将空应用程序修改为基于窗口的应用程序所需的步骤是什么?

时间:2012-01-21 14:37:42

标签: ios xamarin.ios xcode4.2 monodevelop

Where has "window-based" project gone?的后续步骤中,使用Xcode 4.2在MonoTouch中将空应用程序修改为基于窗口的应用程序需要执行哪些步骤?

我正在学习iOS开发并阅读了大约1 1/2本书(最近,"iOS Programming: The Big Nerd Ranch Guide (2nd Edition)" - 好书)。我找到了关于将空应用程序转换为Objective-C的基于窗口的应用程序的说明here

我尝试将这些步骤应用于示例MonoTouch应用程序,并且我得到与需要根视图控制器相关的运行时错误。

是否有网站以简单的头脑为小词列出步骤?

2 个答案:

答案 0 :(得分:1)

通过从我的一本Monotouch书籍(http://www.apress.com/9781430231745)的源代码下载基于窗口的应用程序示例,然后创建一个空解决方案,我发现了以下步骤。我对这些文件进行了比较,并将所需的内容添加到空文件中,使其看起来(和行为)就像基于窗口的文件一样。

  • 将Main中的行UIApplication.Main (args, null, "AppDelegate");更改为UIApplication.Main (args);

  • 将AppDelegate派生的类添加到文件Main.cs(名称空间内):

    // The name AppDelegate is referenced in the MainWindow.xib file.
    public partial class AppDelegate : UIApplicationDelegate
    {
        // This method is invoked when the application has loaded its UI and its ready to run
        public override bool FinishedLaunching (UIApplication app, NSDictionary options)
        {
            // If you have defined a view, add it here:
            // window.AddSubview (navigationController.View);

            window.MakeKeyAndVisible ();

            return true;
        }
    }
  • 删除文件AppDelegate.cs(从项目中删除)。

  • 添加新的Empty iPhone Interface Definition文件,并将其命名为MainWindow.xib

  • 添加一个新的空C#文件并将其命名为MainWindow.xib.designer.cs。插入以下代码:

    using MonoTouch.Foundation;

    namespace MY_NAMESPACE
    {
        [Register ("AppDelegate")]
        partial class AppDelegate
        {
            [Outlet]
            MonoTouch.UIKit.UIWindow window { get; set; }

            void ReleaseDesignerOutlets ()
            {
                if (window != null) {
                    window.Dispose ();
                    window = null;
                }
            }
        }
    }
  • MY_NAMESPACE更改为您的命名空间。

  • 在Interface Builder(Xcode 4.2)中打开MainWindow.xib

  • 将文件所有者的类更改为UIApplication(第三个选项卡 - Identity Inspector)。

  • 添加新的Object对象(在小部件列表中搜索object)并将班级更改为AppDelegate

  • 添加新的Window对象。

  • 选择文件所有者,单击检查器中的最后一个选项卡(Connections Inspector)并将代理链接连接到App Delegate

  • 选择App Delegate并将窗口链接连接到新窗口。

  • 在Interface Builder中保存MainWindow.xib文件更改。

  • 返回MonoDevelop。

  • 打开文件Info.plist并将主界面更改为MainWindow

我收到关于Applications are expected to have a root view controller at the end of application launch的警告,但应用程序似乎正在运行。我怀疑警告来自.xib文件中的一些差异。也许Xcode 3.2版本包含一些迹象表明这是根视图控制器。我如何摆脱这个警告?

答案 1 :(得分:0)

  

已阅读约1 1/2本书

大多数MonoTouch书籍都是在XCode 4之前编写的,事后发生了一些变化。注意:仅AFAIK iOS Development using MonoTouch Cookbook(来自Dimitris)更新(但我尚未尚未读取此内容; - )。

  

是否有网站以简单的头脑为小词列出步骤?

Xamarin的网站上有很多tutorials and samples来帮助你覆盖那些新的(和改变的)事物。 samples的源代码也可在github上获取,以便进行测试或只是浏览它们。

很多其他网站和很棒的博客也在谈论MonoTouch,新的和不常见的API ......谷歌搜索总会带来更多惊喜:)

  

我遇到了与需要根视图控制器相关的运行时错误。

错误?或者是一个警告? iOS5警告缺少根视图控制器。以下是MonoTouch.DialogSample应用程序中使用的代码。

// On iOS5 we use the new window.RootViewController, on older versions, we add the subview
if (UIDevice.CurrentDevice.CheckSystemVersion (5, 0))
    window.RootViewController = navigation; 
else
    window.AddSubview (navigation.View);