system.FormatException:“输入字符串的格式不正确。”在 IAppversion 类中。从 NSObject 到字符串的转换

问题描述 投票:0回答:1

我正在尝试使用 IAppVersion 类获取我的 iOS 项目的构建版本。但是,在通过远程登录到 macbook 部署到 iOS 模拟器时,我得到了 system.formatException 异常。错误是“system.FormatException: 'Input string was not in a correct format.'” 实际上,这是我第一次通过远程登录将 iOS 项目部署到模拟器中。我尝试了很多方法来解决这个问题。但是,他们都没有工作。请让我知道是否有任何方法可以将 NSObject 转换为字符串,然后再转换为 Int。 谢谢。

 public class Version_iOS: IAppVersion
    {
        public string GetVersion()
        {
            return NSBundle.MainBundle.ObjectForInfoDictionary("CFBundleShortVersionString").ToString();
        }
        public int GetBuild()
        {
            return int.Parse(NSBundle.MainBundle.ObjectForInfoDictionary("CFBundleVersion").ToString());

            /*NSObject k = NSBundle.MainBundle.ObjectForInfoDictionary("CFBundleVersion");
            string z = k.Description;
            return int.TryParse(z);*/
        }
    }

我试过也有注释的代码。请参考图片 [1]: https://i.stack.imgur.com/FjJwl.png

c# xamarin.forms nsobject formatexception
1个回答
0
投票

根据CFBundleVesion文档“此密钥是由一到三个以句点分隔的整数组成的机器可读字符串,例如10.14.1。”

这意味着它很可能无法解析为 int。因此,与其尝试将其解析为 int,不如尝试将其解析为 Version:

public Version GetBuild()
{
    return Version.Parse(NSBundle.MainBundle.ObjectForInfoDictionary(
        "CFBundleVersion").ToString());
}

然而,听起来它可以返回一个数字,这对

Version
类无效,所以最安全的做法是将其保留为字符串:

public string GetBuild()
{
    return NSBundle.MainBundle.ObjectForInfoDictionary(
        "CFBundleVersion").ToString();
}

最后一个想法:如果你真的想返回一个 int(版本中的第一个数字),你可以这样做:

public int GetBuild()
{
    return int.Parse(NSBundle.MainBundle.ObjectForInfoDictionary(
        "CFBundleVersion").ToString()
        .Split('.')[0]);
}
© www.soinside.com 2019 - 2024. All rights reserved.