iPhone 上的调试解析 JSON 值的方式与模拟器不同

Posted

技术标签:

【中文标题】iPhone 上的调试解析 JSON 值的方式与模拟器不同【英文标题】:Debugging on iPhone Parses JSON Values Differently vs. Simulator 【发布时间】:2016-09-27 13:35:55 【问题描述】:

我遇到了一个问题,当我在 iPhone 上运行应用程序时,我的表格视图中填充了看起来是中文字符的内容。但是,当我通过模拟器运行应用程序时,我得到了预期的(英文)结果。下面是问题的截图。

在模拟器中运行

在 iPhone 上运行

以下是填充对象的代码

private func populateArtists(_ maxRecordsToPopulate: Int, json: JSON) 

    let artists = json["artists"]["items"]

    for i in 0 ..< artists.count 

        if i < maxRecordsToPopulate 

            let artist = Artist()

            print(artists[i]["name"].string!)

            artist.name = artists[i]["name"].string!
            artist.detailUrl = artists[i]["href"].string!
            artist.id = artists[i]["id"].string!

            self.searchResults.artists.append(artist)

        

    


当我在里面放置一个断点时,看起来返回的 JSON 值的解析方式不同。

模拟器中运行的应用的输出

iPhone 上运行的应用的输出

我认为这可能是本地化设置或手机上的某处,但不知道如何确定是否是这种情况。我已经尝试从手机中删除该应用程序并重新安装,但这也无济于事。

我使用的框架是 Facebook SDK、Alamofire 和 Swifty-JSON,以防它们中的任何一个都可能导致这个奇怪的问题。

【问题讨论】:

【参考方案1】:

这通常是 HTTP 请求中 Accept-Language 标头的问题。设备是否设置为另一种语言?如果是这样,它将默认使用该语言。您可以使用NSMutableURLRequest 手动更改标头值并将该值更改为described here。

【讨论】:

该设备未设置为另一种语言,但出于某种原因,它在“设置”>“常规”>“语言和地区”下添加了日语。我的猜测是我的一个孩子抓住了我的手机并意外添加了它。感谢您为我指明正确的方向。【参考方案2】:

您将获得不同的本地化版本的数据。在您的示例中-“クイ–ン”是日语Katakana“女王”的音译。 JSON 解析问题不会将罗马文本转换为日语音译,因此您会得到具有不同内容的 JSON。

【讨论】:

以上是关于iPhone 上的调试解析 JSON 值的方式与模拟器不同的主要内容,如果未能解决你的问题,请参考以下文章

无法将数据保存到 iPhone 上的文件

iPhone 上的调试与发布模式

使 iPhone 能够获取和解析 JSON?

使用 Asihttprequest 和 iPhone 的 Json 框架解析 JSON 数据

为 iphone 解析 json 时获取空值?

如何解析具有多个值的 json?