代码之家  ›  专栏  ›  技术社区  ›  Hector204

更新签入目标-C?来自C#

  •  1
  • Hector204  · 技术社区  · 16 年前

    我正在将我在C上编写的一个程序移植到Cocoa,我正在尝试找出如何使用XML联机访问我的网站,获取文件并对其进行解析,然后比较版本并弹出一个消息框,询问是否要打开浏览器以进入更新页。

    以下是C#的代码:

     public void CheckVersion()
        {
            Version newVersion = null;
            string url = "";
            string newfeatures = "";
            try
            {
                string xmlURL = "http://myurl.com/version.xml";
                XmlRead = new XmlTextReader(xmlURL);
                XmlRead.MoveToContent();
                string elementName = "";
                if ((XmlRead.NodeType == XmlNodeType.Element) &&
                    (XmlRead.Name == "myProgram"))
                {
                    while (XmlRead.Read())
                    {
                        if (XmlRead.NodeType == XmlNodeType.Element)
                            elementName = XmlRead.Name;
                        else
                        {
                            if ((XmlRead.NodeType == XmlNodeType.Text) &&
                                (XmlRead.HasValue))
                            {
                                switch (elementName)
                                {
                                    case "version":
                                        newVersion = new Version(XmlRead.Value);
                                        break;
                                    case "url":
                                        url = XmlRead.Value;
                                        break;
                                    case "newfeatures":
                                        newfeatures = XmlRead.Value;
                                        break;
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Could not connect to update checking server.");
            }
            finally
            {
                if (XmlRead != null) XmlRead.Close();
            }
            Version curVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
            if (curVersion.CompareTo(newVersion) < 0)
            {
                string title = "New Version Online";
                string question = "Download new version? \nmyProgram Version: " + newVersion.ToString();
                if (DialogResult.Yes ==
                 MessageBox.Show(this, question + "\n\n" + newfeatures, title,
                                 MessageBoxButtons.YesNo,
                                 MessageBoxIcon.Question))
                {
                    System.Diagnostics.Process.Start(url);
                }
            }  
        }
    

    我对cocoa还很陌生,大部分的C代码都是一个片段,所以任何建议或帮助都会很好。

    1 回复  |  直到 16 年前
        1
  •  3
  •   Sven    16 年前

    对于更新,可用的最佳解决方案是Sparkle,正如其他人之前指出的那样。

    URL Loading System 继续 NSXMLDocument . 这样就不难获取和解析数据,但您将无法将所有内容都塞进一个方法中。 NSURLConnection 与委托一起工作,这样您就不必在当前线程从服务器获取数据时阻止它。