2017-07-27 51 views
0

好吧,我還沒有找到任何地方。在Swift中,我需要獲取最近添加的Parse項目,其中有2列填充了非零數據。如果最近最近有1列或更多的列是零,我需要查詢來「選擇」並從包含所有數據的下一個最近項目獲取數據。Swift/Parse:如何獲取最近填充數據的項目?

這是伊夫怎樣努力 - 我可以使用.order(byDescending: "createdAt")但是,我需要得到字符串和圖像順利拿到最近的項目,我不能讓它選擇最近的一次,有它的所有數據填寫

我試着迭代對象數組並選擇一個PFObject,但是這樣做會產生錯誤,因爲我不想讓VC類成爲PFSubclassing類。

//Parse - store global values 
      var query = PFQuery(className: PARSE_CLASS!) 
      query.order(byDescending: "createdAt") 
      query.limit = 1 
      query.findObjectsInBackground { 
       (objects, error) -> Void in 

       var objToUse = PFObject() 

       if error == nil { 
        //get obj 
        for o in objects! 
        { 
         if(o["testTxt"] != nil && o["testImg"] != nil) 
         { 
          objToUse = o 
         } 
        } 

        //---------------------------------------------------> 
        for item in contentLinkKeys 
        { 

    //    txtSources[item] = (objects?.first?["\(item)-blurb"] as! String) 
         if(objToUse["testTxt"] != nil && objToUse["testImg"] != nil) 
         { 

          txtSources[item] = ((objToUse["testTxt"] as! String) as! String) 

         if let validObjects = objects { 
          for object in validObjects { 
           let thumbnail = objToUse["testImg"] as? PFFile 
           thumbnail?.getDataInBackground (block: { (data, error) -> Void in 
            //read image here 
            var img = UIImage(data: data!) 
            imgSources[item] = img 

           }) 
          } 
          } 


         } //if } 

        } //for bracket 
       } 

我怎樣才能做到這一點呢?現在如果最近一個具有零圖像或什麼的,它只是不顯示圖像。我怎樣才能讓它知道去迭代並找到下一個最新的,所有列都被填充?

回答

1

你可以做類似下面的事情。這裏發生的事情是,我們首先以創建的日期順序獲取所有數據,然後過濾掉那些有效的數據,即那些具有所有必填字段的數據。然後我們下載圖像數據並將其添加到源項目。

class ParseObject: PFObject, PFSubclassing { 

    @NSManaged var testTxt: String? 
    @NSManaged var testImage: PFFile? 

    class func parseClassName() -> String { 
     return "ParseClassName" 
    } 
} 


func test() { 

    var itemSource = [UIImage]() 

    let query = PFQuery(className: "ParseClassName") 
    query.order(byDescending: "createdAt") 
    //query.limit = 1 why 1 it will always fetch one object we have to iterate so let gets some more 
    query.findObjectsInBackground { (objects, error) in 
     if let error = error { 
      //error occured 
      print(error.localizedDescription) 
     } 
     else { 
      //now we have the objects so we filter the once that doesn't have nil data for those fields 
      if let objects = objects as? [ParseObject] { 
       let filteredObjects = objects.filter{ ($0.testTxt != nil && $0.testImage != nil)} 

       /////// If you want all the objects that are valid i.e tesTxt and testImage are certainly in there ////////// 

       for parseObject in filteredObjects { 
        let thumbnail = parseObject.testImage! 
        thumbnail.getDataInBackground(block: { (data, error) in 
         if let error = error { 
          //error 
          print(error.localizedDescription) 
         } 
         else { 
          if let image = UIImage(data: data!) { 
           //set the image 
           itemSource.append(image) 
          } 
         } 
        }) 
       } 
      } 
     } 

    } 

} 

但不是直接在集合中添加或添加圖像不是好主意。您可以使用對象集合並在需要時下載圖像

+0

謝謝 - 我一定會把它用來使用。您能否提供一個如何在需要時下載圖像的例子?以上是我通過 – skyguy

+0

拍攝影像的唯一方法取決於您以後如何使用這些影像? – kathayatnk

相關問題