2015-06-02 47 views
0

我使用這個代碼來解析數據檢索圖像...如何查詢的PFFile通過創建時間

if let userPicture = object.valueForKey("Image") as? PFFile { 
     userPicture.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in 
      if (error == nil) { 
       let image = UIImage(data:imageData!) 
       self.ImageArray.insert(image!, atIndex: 0) 
      } 
      else { 
       self.alert("Error: \(error!) \(error!.userInfo!)", Message: "Make sure you have a secure internet connection") 
      } 
      dispatch_async(dispatch_get_main_queue()) { 
       println("Finished Pictures") 
      } 
     }) 
} 

,我使用這個代碼來解析檢索字符串:

var stuffarray = [String]() 

var query = PFQuery(className:"ClassName") 
query.findObjectsInBackgroundWithBlock { 
      (objects: [AnyObject]?, error: NSError?) -> Void in 

     if error == nil { 
      // The find succeeded. 
      println("Successfully retrieved \(objects!.count) scores.") 
      // Do something with the found objects 
      if let objects = objects as? [PFObject] { 
       for object in objects { 
        stuffarray.append(object.valueForKey("Column")! as! String) 
       } 
      } else { 
       // Log details of the failure 
       println("Error: \(error!) \(error!.userInfo!)") 
      } 

      dispatch_async(dispatch_get_main_queue()) { 
       self.alert("\(stuffarray)", Message: "") 
      } 
     } 
}  

我知道如何通過添加以下代碼來查詢第二個例子:

query.orderByAscending("createdAt") 

我的問題是,我該如何查詢第一次考試我在第二個例子中做了同樣的方式嗎?我試着用下面的代碼,但我得到一個錯誤:

userPicture.orderByAscending("createdAt") 

我用下面的代碼嘗試,是否被正確返回的文本,但圖像以隨機順序還是回到...

var query = PFQuery(className:"Featured") 
query.orderByDescending("createdAt") 
query.findObjectsInBackgroundWithBlock { 
    (objects: [AnyObject]?, error: NSError?) -> Void in 

    if error == nil { 
     // The find succeeded. 
     println("Successfully retrieved \(objects!.count) Items.") 
     // Do something with the found objects 
     if let objects = objects as? [PFObject] { 
      for object in objects { 

       self.NameArray.insert(object.valueForKey("Text")! as! String, atIndex: 0) 
       self.ItemNameArray.insert(object.valueForKey("ItemName")! as! String, atIndex: 0) 


       let userImageFile = object["Image"] as! PFFile 
       userImageFile.getDataInBackgroundWithBlock { 
        (imageData: NSData?, error: NSError?) -> Void in 
        if error == nil { 
         if let imageData = imageData { 
          let image = UIImage(data:imageData) 

          self.imageArray.insert(image!, atIndex: 0) 
         } 
        } 



        dispatch_async(dispatch_get_main_queue()) { 

         self.loading.hidden = true 

         self.collectionView.reloadData() 

        } 

       } 




      } 


     } 
    } else { 
     // Log details of the failure 
     println("Error: \(error!) \(error!.userInfo!)") 

    } 

     } 

回答

0

迴應「我將它改爲'追加',並且數組圖像仍然是隨機排列的,其他2個字符串項目完美地工作,爲什麼它只是圖像,請迅速給出答案。 「:

你的圖像仍然是隨機排列的原因是因爲它們是從服務器異步下載的。 PFFile getDataInBackgroundWithBlock在後臺運行,較小的文件可能比以前啓動的較大文件更快。

你不應該下載你的圖像,直到你真的準備好在你的UICollectionView或UITableView中顯示它們。當您渲染單元格時,您將只需要撥打PFFile getDataInBackgroundWithBlock

0

第一個查詢出現錯誤的原因是您沒有獲取對象數組。您正在獲取無法「排序」的單個PFFile的數據內容。如果您希望查詢PFFiles列表並按創建日期排序,您需要查詢圖像所附的Class對象,然後爲每個對象(最好是異步)提取圖像數據。例如,請參閱下面的代碼段:

PFQuery *query = [PFQuery queryWithClassName:@"Photo"]; 
[query orderByDescending:@"createdAt"]; 

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 

    if (!error) { 
     for (PFObject *object in objects) { 

      [objectIDArray addObject:object.objectId]; 
      NSString *postedBy = object[@"postedBy"]; 
      [postedByFeedArray addObject:postedBy]; 
      NSString *caption = object[@"caption"]; 
      [captionFeedArray addObject:caption]; 

      PFFile *file = object[@"photoFile"]; 
      [file getDataInBackgroundWithBlock:^(NSData *data, NSError *error) { 
       if (!error) { 
        [photoFeedArray addObject:data]; 
       } 
       dispatch_async(dispatch_get_main_queue(), ^{ 
        [_activityIndicator stopAnimating]; 
        [_tableView reloadData]; 
       }); 
      }]; 

     } 
    } else { 
     NSLog(@"ERROR: %@", error); 
    } 
}]; 

如果您需要幫助將其轉換爲Swift,請告訴我。

+0

我不知道任何目標-c。請幫我把它轉換成swift。 –

+0

你能澄清你在哪裏看到你的圖像以錯誤的順序返回?它是在數組中還是在您的視圖本身?我可以看到,您正在PFQuery上執行orderByDescending,但是您將結果插入索引爲0的數組中。通過將最後一個對象移動到數組的第一個,可以顛倒查詢的順序。那可能是你的罪魁禍首? – mrbcg

+0

將.append用於.insert atIndex位置 – mrbcg

相關問題