2017-03-06 5 views
0

私はデモの目的で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 
      }) 


     } 

} 
+0

あなたは客観的な答えを扱うことができますか? – danh

+0

はい、私は何でも取れます。 – john

+0

@ダンは私の状況を理解していますか? – john

答えて

1

トラブルは、forループタイトがボトルネックにHTTPスタックの一部を引き起こし、同時にこれらの要求のすべてを起動するということです。

その代わりに、次のように...(スウィフトの私の最良の近似で)順次英語で

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) 
    }) 
} 

をリクエストを実行し、念のため、私はスウィフトをgoofed、アイデアは、単一の要求を考慮することです補完ハンドラを持つ独自の関数です。ネットワーク要求に対する引数の配列をとり、to-doリストのような配列を使用する2番目の関数を作成します。リストの最初の項目を実行します。完了すると、残りの項目を再帰的に呼び出します。

+0

私は質問があります。何が行われ、何をするか。 Xcodeは、それらのスクリプトを認識しないと言っています。あなたが脱いだものがありますか – john

+0

@john、これはちょっと私の近似です。これはアルゴリズムが正確な構文ではないことを示しています。私はそれについてはっきりとしていると思った。 – danh

関連する問題