首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的IOS代码没有从json webservice检索数据。

我的IOS代码没有从json webservice检索数据。
EN

Stack Overflow用户
提问于 2016-03-09 09:28:40
回答 2查看 69关注 0票数 0

我的IOS代码是

代码语言:javascript
复制
    let reposURL = NSURL(string: "http://localhost/Test/test.html")
    // 2
    do{
        if let JSONData = NSData(contentsOfURL: reposURL!) {
            // 3
            if let json = try NSJSONSerialization.JSONObjectWithData(JSONData, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary {
                // 4
                if let reposArray = json["items"] as? [NSDictionary] {
                    // 5
                    for item in reposArray {
                       // if let name = item.valueForKey("name") {
                        //    NameOfArtist.append(name as! String)
                        //}
                                              }
                }
            }
        }

    }catch{}

我的Json Outout是

{"total_count":741,"incomplete_results":假,“项目”:{"id":47,“标题”:“SLAF,2010年DSG海军联合冠军”,modified_date:“2010-10-03 10:16:45","frontpage":"Y"},{"id":46,”title“:”国防服务海滩“,"main_image":"","modified_date":"2010-09-29 14:00:02","frontpage":"Y"},{"id":45,“title”:“国防服务壁球锦标赛”,“main_image”:"modified_date":"2010-09-29 13:55:53","frontpage":"Y"},{id:44,“title”:“国防服务排球决赛”,“main_image:”,"modified_date":"2010-09-29 09:37:44","frontpage":"Y"},{"id":43,“title”:“国防服务划船锦标赛-2010年”,“main_image”:"modified_date":"2010-09-27 10:14:31","frontpage":"Y"},{"id":42,“title”:“国防服务柔道锦标赛”,“main_image”:“,"modified_date":"2010-09-27 06:23:30","frontpage":"Y"},{"id":41,“title”:“国防服务加权”,“main_image”:"modified_date":"2010-09-27 04:27:17","frontpage":"Y"},{"id":40,“title”:“国防服务网球”,“main_image”:“,”,"modified_date":"2010-09-24 13:16:36","frontpage":"Y"},{"id":39,“title”:“国防服务游戏竞技”,"main_image":"uploads/news/defence_services_games_athletic/28.jpg","modified_date":"2010-09-27 09:30:32","frontpage":"Y"},{"id":38,"title":"SLAF男女在国防服务中的水球“,“main_image”:"modified_date":"2010-09-18 12:29:41","frontpage":"Y"},{"id":37,“title”:“陆军现身国防服务队战士”,"main_image":"","modified_date":"2010-09-19 08:01:43","frontpage":"Y"},{"id":36,“标题”:“国防服务卡巴迪锦标赛”,“main_image”:“,”,"modified_date":"2010-09-18 12:28:38","frontpage":"Y"},{"id":35,“title”:“陆军国防服务队手球冠军”,"main_image":"uploads/news/hand_ball_final/4.jpg","modified_date":"2010-09-17 09:22:54","frontpage":"Y"},{"id":34,“标题”:“陆军和苏丹解放军第一次参加国防服务手球总决赛”,"main_image":"uploads/news/defence_service_handball/1.jpg","modified_date":"2010-09-17 04:16:57",“前沿”:“Y”},{"id":33,“标题”:“陆军在国防军冰球总决赛击败苏丹解放军”,"main_image":"",“modified_date”:“2010-09-1404:43:52”,“前沿”:“Y”},{"id":32,“标题”:“国防服务运动会网球公开赛”,“main_image”:"modified_date":"2010-09-14 04:35:29","frontpage":"Y"},{"id":31,"title":"SLAF国防服务2010年乒乓球冠军“,”main_image“:”modified_date“:”2010-09-1403:55:28“,"frontpage":"Y"},{"id":30,“title”:“国防服务游戏2010 -自行车”,“main_image”:"modified_date":"2010-09-13 08:46:06","frontpage":"Y"},{"id":29,“title”:“海军在国防服务队Rugby”、“main_image”:“modified_date”:“2010-09-1107:16:19”,“前沿”:“Y”},{"id":28,“标题”:“SLAF在国防曲棍球处击败海军”,"main_image":"","modified_date":"2010-09-11 07:15:56",“frontpage”:“Y}

我用另一个web服务链接测试了这段代码

"https://api.github.com/search/repositories?q=learn+swift+language:swift&sort=stars&order=desc

..Then它起作用了。我的代码或json文件有什么问题吗?

EN

回答 2

Stack Overflow用户

发布于 2016-03-09 09:35:08

您必须遵循这个来调用任何web服务。

有关详细信息,请参阅苹果的Info.plist参考资料(谢谢@gnasher729)。

您可以在Info.plist中添加特定域的异常:

代码语言:javascript
复制
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>testdomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <false/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>
    </dict>
</dict>

每个例外域的所有键都是可选的。演讲者没有详细说明其中的任何一个键,但我认为它们都是相当明显的。

(来源: WWDC 2015 session 703,“Privacy and Your App”,30:18)

如果您的应用程序有很好的理由这样做,您也可以用一个键忽略所有应用程序传输安全限制:

代码语言:javascript
复制
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

如果您的应用程序没有很好的理由,您可能面临被拒绝的风险:

将NSAllowsArbitraryLoads设置为true将允许其工作,但苹果非常清楚,他们打算拒绝使用此标志的应用程序,而没有具体的原因。我认为使用NSAllowsArbitraryLoads的主要原因是用户创建的内容(链接共享、自定义web浏览器等)。在这种情况下,Apple仍然希望您包含一些异常,这些异常会对您控制的URL强制使用ATS。

如果您确实需要访问TLS1.2中没有提供的特定URL,则需要为这些域编写特定的异常,而不是将NSAllowsArbitraryLoads设置为yes。您可以在NSURLSesssion WWDC会话中找到更多信息。

请在共享NSAllowsArbitraryLoads解决方案时小心。这不是苹果推荐的解决方案。-查伍德(谢谢@marco-tolman)

票数 1
EN

Stack Overflow用户

发布于 2016-03-09 10:37:16

您的web服务应该返回其响应,头部Content-Type设置为application/json,以便NSJSONSerialization.JSONObjectWithData()工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35887625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档