我的IOS代码没有从我的json webservice

时间:2016-03-09 09:28:40

标签: ios swift

我的IOS代码是

    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”:false,“items”:[{“id”:47,“title”:“SLAF,海军联合冠军在DSG 2010”,“main_image”:“上传/ news / dsg_2010_closing_ceremony / 71.jpg“,”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,”山雀le“:”防御服务网球“,”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 Beats Army Men&女子防务服务水球“,”main_image“:”“,”modified_date“:”2010-09-18 12:29:41“,”首页“:”Y“},{”id“:37,”title “:”陆军出现防御服务Rugger冠军“,”main_image“:”“,”modified_date“:”2010-09-19 08:01:43“,”frontpage“:”Y“},{”id“:36 ,“标题”:“国防服务卡巴迪锦标赛”,“main_image”:“”,“modified_date”:“2010-09-18 12:28:38”,“首页”:“Y”},{“id”: 35,“头衔”:“陆军防务服务手球冠军”,“main_image”:“uploads / news / hand_ball_final / 4.jpg”,“modified_date”:“2010-09-17 09:22:54”,“首页” “:”Y“},{”id“:34,”title“:”Army& SLAF参加首届有史以来防务服务手球总决赛“,”main_image“:”uploads / news / defence_service_handball / 1.jpg“,”modified_date“:”2010-09-17 04:16:57“,”frontpage“:” Y“},{”id“:33,”title“:”陆军击败SLAF参加国防部曲棍球决赛“,”main_image“:”“,”modified_date“:”2010-09-14 04:43:52“ ,“frontpage”:“Y”},{“id”:32,“title”:“Defense Services Games Tennis Open”,“main_image”:“”,“modified_date”:“2010-09-14 04:35: 29“,”frontpage“:”Y“},{”id“:31,”title“:”SLAF防御服务2010乒乓球冠军“,”main_image“:”“,”modified_date“:”2010-09-14 03:55:28“,”frontpage“:”Y“},{”id“:30,”title“:”2010年防务服务游戏 - 骑行“,”main_image“:”“,”modified_date“:”2010- 09-13 08:46:06“,”frontpage“:”Y“},{”id“:29,”title“:”Navy Beat SLAF At Defense Services Rugby“,”main_image“:”“,”modified_date“ :“2010-09-11 07:16:19”,“frontpage”:“Y”},{“id”:28,“title”:“SLAF击败海军防御服务曲棍球”,“main_image”:“ “,”modified_date“:”2010-09-11 07:15:56“,”frontpage“:”Y“}]}

我使用其他网络服务链接

测试了此代码

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

..然后它有效。我的代码或我的json文件有什么问题

2 个答案:

答案 0 :(得分:1)

您必须按此操作才能调用任何网络服务

有关详细信息,请参阅Apple的Info.plist参考(感谢@ gnasher729)。

您可以在Info.plist中添加特定域的例外:

<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会议703,“隐私与你的应用”,30:18)

如果您的应用有充分的理由,您还可以使用单个密钥忽略所有应用传输安全限制:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

如果您的应用没有充分的理由,您可能会有被拒绝的风险:

  

将NSAllowsArbitraryLoads设置为true将允许它工作,但是   Apple非常清楚他们打算拒绝使用它的应用程序   没有特定原因的旗帜。使用的主要原因   NSAllowsArbitraryLoads我能想到的将是用户创建的内容   (链接共享,自定义Web浏览器等)。在这种情况下,苹果仍然   期望您包含为URL强制执行A​​TS的例外   你掌控着。

如果确实需要访问未通过TLS 1.2提供的特定URL,则需要为这些域编写特定的例外,而不是使用设置为yes的NSAllowsArbitraryLoads。您可以在NSURLSesssion WWDC会话中找到更多信息。

请小心分享NSAllowsArbitraryLoads解决方案。这不是Apple的推荐修复。 - kcharwood(感谢@ marco-tolman)

答案 1 :(得分:1)

您的网络服务应返回其回复,其标头Content-Type设置为application/json NSJSONSerialization.JSONObjectWithData()才能生效。