2016-02-23 36 views
1

我正在開發一個與Apache Usergrid一起使用的iOS應用程序。到目前爲止,一切工作,我可以註冊用戶,登錄,查詢...Apache Usergrid Swift SDK訪問資產映像

btw:我正在與Usergrid 2.1.0發佈,運行在我自己的服務器上。

現在我想存儲用戶個人資料圖片。我這樣做:

let image = UIImage(named:"user.png")!  
let asset = UsergridAsset(fileName: "profilepic", image: image, imageContentType: .Png)! 

Usergrid.currentUser!.uploadAsset(asset, progress: nil) { (response, asset, error) -> Void in 
    if response.ok { 
     print("Picture saved") 
    } else { 
     self.showErrorMessage("Picture couldn't be saved") 
     print(response.description) 
    } 
} 

這似乎是工作,因爲當看着門戶網站時,我可以看到有關在我的用戶的實體「文件元數據」的東西。現在的問題是:我如何獲取圖像?我試過如下:

Usergrid.currentUser?.downloadAsset("image/png", progress: nil, completion: { (asset, error) -> Void in 
    if (error == nil) { 
     if let image = UIImage(data: (asset?.data)!) { 
      dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       self.profileImageButton.setImage(image, forState: .Normal) 
      })   
     } 
    } 
} 

,但每次我得到的錯誤「實體不具有資產連接」的時候,其實我可以看到與Firefox RESTClient實現的幫助下圖像。我究竟做錯了什麼?

+0

Swift SDK中可能會出現錯誤嗎?當我構建自己的UsergridRequest時,手動設置我想要檢索的文件的路徑和標題,我確實得到了一個包含圖像數據的回覆,這當然會拋出一個錯誤,因爲它無法轉換爲JSON。試圖找到錯誤... – ChrisNewman

回答

2

entity.hasAsset爲假時,出現「實體沒有附加資產」的錯誤,即entity.asset == nil && entity.fileMetaData?.contentLength <= 0

如果您正在上傳資產並直接下載該資產,Usergrid.currentUser可能尚未更新其fileMetaData或資產實例屬性。

我試圖在檢索資產數據之前嘗試通過調用Usergrid.currentUser!.reload()來更新當前用戶。

Usergrid.currentUser!.reload() { response in 
    if response.ok { 
     Usergrid.currentUser!.downloadAsset("image/png", progress:nil) { downloadedAsset, error in 
      // Handle downloaded asset here. 
     } 
    } 
} 

還值得一提的是,迅速SDK的更多最新的(測試版)版本可以在我的叉子here被發現。

+0

另外我添加了一個測試用例[位於](https://github.com/RobertWalsh/usergrid/blob/master/sdks/swift/Tests/ASSET_Tests.swift#L150),可以在實施時幫助你。 – robertwalsh

+0

感謝您的回覆!我現在正在使用sdk的beta版本,而且這真的很奇怪。我寫了一個小測試應用程序,實際上在模擬器中工作,但在設備上它說沒有「資產附加」,而在我的主應用程序中,它既不在模擬器也不在設備上工作。例外情況:在將圖片資源保存到用戶後,它會正常工作,保存後立即執行您的建議重新加載。我通常在viewDidAppear()中調用currentUser!.downloadAsset(),因爲我希望在應用圖像時加載imageView。這可能是一個問題嗎? – ChrisNewman

+0

這聽起來很奇怪。如果不能夠看到代碼,真的很難說。有沒有可能將測試應用上傳到github,我可以看看它? – robertwalsh