簡體   English   中英

保存多個圖像以進行解析

[英]Saving multiple images to Parse

因此,出於演示目的,我從xcassets中訪問了一系列圖像。 我正在嘗試使用解析框架一次將150張圖像保存到解析服務器。 這是我到目前為止的代碼。 我的問題是我的應用程序cpu在測試中達到100%並下降為0。而且圖像沒有保存以進行解析。 我希望有人可以幫助我找到一種有效的方法來保存150張圖像進行解析。

var imageNameList: [String] {
    var imageNameList2:[String] = [] //[NSMutableArray]()
    for i in 0...149 {
        let imageName = String(format: "pic_%03d", Int(i))
        imageNameList2.append(imageName)
    }
    return imageNameList2
}
@IBAction func Continue(_ sender: Any) {
        for imageName in imageNameList {
            var objectForSave:PFObject = PFObject(className: "Clo")
            let object:UIImage = UIImage(named: imageName)!
            let tilesPF = imageNameList.map({ name in
                let data = UIImagePNGRepresentation(object as! UIImage)!
                let file = PFFile(data: data)

                let tile = PFObject(className: "Tile")
                tile["tile"] = file
            })

            objectForSave["tiles"] = tilesPF

            objectForSave.saveInBackground(block: { responseObject, error in

                //you'll want to save the object ID of the PFObject if you want to retrieve a specific image later
            })


        }

}

問題在於緊密的for循環同時啟動所有這些請求,從而導致http堆棧的某些部分成為瓶頸。

而是按以下順序運行請求(以我最接近Swift的方式)...

func doOne(imageName: String, completion: (success: Bool)->()) {
    var objectForSave:PFObject = PFObject(className: "Clo")
    let object:UIImage = UIImage(named: imageName)!
    // ... OP code that forms the request
    objectForSave.saveInBackground(block: { responseObject, error in
        success(error == nil) 
    })
}

func doMany(imageNames: Array<String>, completion: (success: Bool)->()) {
    if (imageNames.count == 0) return completion(YES)
    let nextName = imageNames[0];

    self.doOne(imageName:imageNames[0] completion: {(success: Bool) -> Void in
        if (success) {
            let remainingNames = imageNames[1..imageNames.count-1]
            self.doMany(imageNames: remainingNames completion:completion)
        } else {
            completion(NO)
    })
}

用英語講,以防萬一我弄錯了Swift,這個想法是通過完成處理程序將單個請求分解成它自己的函數。 構建第二個函數,該函數接受網絡請求的參數數組,並像待辦事項列表一樣使用該數組:完成列表中的第一項,完成后,遞歸調用自身以執行其余項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM