2015-11-22 2 views
1

Я хочу удалить предел, чтобы получить все данные из синтаксического разбора с помощью этого кода ниже. но не работает, я не нашел простой способ сделать это с быстрым, я нашел столб, похожий на тот How to Fetch all data in a table using PFQuery in iOS?, но с объективистскиеПолучить все данные в таблице, используя PFQuery swift

может кто-то помочь мне я новичок в быстрой

var allObjects: [AnyObject] = NSMutableArray() as [AnyObject] 
 
     let limit: Int = 1000 
 
     var skip: Int = 0 
 
     let posts1 = PFQuery(className:"Post") 
 
     
 
     if let user = PFUser.currentUser(){ 
 
     let radius = 100000000000000000000000000000000000.0 
 
     posts1.limit = limit 
 
     posts1.whereKey("createdBy", equalTo: user) 
 
     posts1.whereKey("location", nearGeoPoint: currentLoc, withinKilometers: radius) 
 
     posts1.skip = skip 
 
     posts1.findObjectsInBackgroundWithBlock({(objects: [AnyObject]?, error: NSError?) in 
 
      
 
      if (error == nil) { 
 
       allObjects.append(objects!) 
 
       
 
       
 
      //allObjects.addObjectsFromArray(objects) 
 
      if objects!.count == limit { 
 
       skip += limit 
 
       posts1.skip = skip 
 
       posts1.findObjectsInBackgroundWithBlock({(objects: [AnyObject]?, error: NSError?) in 
 
        
 
        if (error == nil) { 
 
         allObjects.append(objects!) 
 
         // allObjects.addObjectsFromArray(objects) 
 
        
 
       
 
        } 
 
       }) 
 
      } 
 
     } 
 
     else { 
 
      print("Error: %@ %@", error, error!.userInfo) 
 
       } 
 
      
 
      }) 
 
     } 
 
       print("\(allObjects)")

+1

Если вам нужно запрашивать больше объектов, чем предел, ваша модель данных является субоптимальной. Вы всегда должны планировать свою модель данных на основе ваших * запросов * при разработке мобильных приложений. Было бы очень медленно и неэффективно, если бы мобильное устройство получало это множество объектов. Существуют различные способы обращения с этим, в зависимости от того, что вы хотите делать с данными, которые вы извлекаете. Если вы опишете свой вариант использования, было бы проще предложить решения. В любом случае маловероятно, что получение всех объектов является правильным решением. – Moonwalkr

ответ

1

Один из способов сделать это является использование метода рекурсии, поместите код выше внутри функции, и вызывать эту функцию всякий раз, когда объекты! .count == предел

например.

var allObjects: [AnyObject] = NSMutableArray() as [AnyObject] 
var querySkip = 0 
let limit: Int = 1000 
func getDataFromParse() { 
    let posts1 = PFQuery(className:"Post") 

     if let user = PFUser.currentUser(){ 
     let radius = 100000000000000000000000000000000000.0 
     posts1.limit = limit 
     posts1.whereKey("createdBy", equalTo: user) 
     posts1.whereKey("location", nearGeoPoint: currentLoc, withinKilometers: radius) 
     posts1.skip = self.querySkip 
     posts1.findObjectsInBackgroundWithBlock({(objects: [AnyObject]?, error: NSError?) -> Void in 

      if (error == nil) { 
       allObjects.append(objects!) 


       //allObjects.addObjectsFromArray(objects) 
       if objects!.count == limit { 
        self.querySkip += self.limit 
        self.getDataFromParse() 
       } else { 
        // All Data are loaded here 
       } 
      } else { 
       print("Error: %@ %@", error, error!.userInfo) 
      } 

     }) 
     } 
       print("\(allObjects)") 

} 
+0

Чистый раствор! –

Смежные вопросы