2016-07-12 29 views
0

我想从连接到Heroku上托管的Parse Server实例的MongoDB数据库中获得一个PFFile。加载并保存PFFile到mongoDB

我保存的文件,以便(文件< 10MB):

var post = PFObject(className: "Posts") 
let imageData = UIImageJPEGRepresentation(UIImage(named: "post_two")!, 0.5) 

post["picImage"] = PFFile(name: "post_two.jpg", data: imageData!) 
post["username"] = "example" 
post["title"] = "welcome" 
post["info"] = "Thanks" 

post.saveInBackgroundWithBlock { (success:Bool?, error:NSError?) in 
       if (success != nil && success == true) 
       { 
        print("post registred") 
       } 
       else{ 
        print(error!.localizedDescription) 
       } 

      } 

和我装后这样:

let elements = PFQuery(className: "Posts") 
elements.findObjectsInBackgroundWithBlock ({ (objects:[PFObject]?, error:NSError?) -> Void in 
      if error == nil 
      { 


       for object in objects! 
       { 
        //add found data to arrays (holders) 

       let imagesQuery = object.valueForKey("picImage") as! PFFile 
       picArray.append(imagesQuery) 


       } 


      } 

      else 
      { 
       print((error?.localizedDescription)! + "load post") 
      } 

}) 

的问题是在这里:

picArray[i].getDataInBackgroundWithBlock { (data:NSData?, error:NSError?) -> Void in 



      if error == nil 
      { 

       picImg.image = UIImage(data: data!) 
      } 
      else 
      { 

       print((error?.localizedDescription)!) 
      } 
     } 

的错误是:网络连接失败。睡觉13.835050秒后尝试4次。 [错误]:不支持的URL(代码:100,版本:1.12.0)不受支持URL

在DEBUG中,getDataInBackgroundWithBlock中的数据是NiL。我不知道问题是文件存储,加载还是应用传输安全设置(在某些文章中,有人建议包括例外域,我已经正确插入,但没有任何更改)。

非常感谢,我不知道在哪里可以找到一个解决方案

回答

0

在解析服务器的文件都存储在下列方式: [SERVER_URL] /文件/ [APP_ID]/[YOUR_FILE]

对于Parse“不支持的URL”对应于NSURLErrorUnsupportedURL。 我认为你的网址包含了一些必须百分比转义的字符。 因此,您的[APP_ID]或[YOUR_FILE]可以包含URL中不支持的字符。

通常由RFC 3986定义的URI。 你可以在这里看到unreserved characters

您可以通过以下方式获得您的网址:

print(picArray[i].url) 

如果你这个URL粘贴在Web浏览器为您它将%的逃逸。

尝试在Heroku配置变量中更改您的APP_ID。 并将其添加到AppDelegate.swift

随着老斯威夫特版本:

let configuration = ParseClientConfiguration { 
     $0.applicationId = "YOUR NEW APP ID" 
     $0.server = "http://example.com/parse" 
    } 
    Parse.initializeWithConfiguration(configuration) 

随着斯威夫特3

let configuration = ParseClientConfiguration { 
    $0.applicationId = "YOUR NEW APP ID" 
    $0.server = "http://example.com/parse" 
} 
Parse.initialize(with: configuration) 

对不起,我的英文不好, 我希望我的回答有帮助

+0

谢谢,我尝试并更新你:) – user2224174

+0

谢谢你的回复:) –